PHP Mysqli 预处理语句 select fetch_assoc 给出空结果
PHP Mysqli prepared statement select fetch_assoc gives empty result
我正在尝试一些非常简单的事情,但由于某种原因,它无法像我预期的那样工作。为此,我想 select 一个特定的行,然后通过更新将该行分配给另一个 table。
这是我想要的脚本 运行:
<?php
$passedID = $_POST["upvotedurl"];
$mysqli = new mysqli('localhost', 'root', '', 'osscom_users_test');
$sqlstm = "SELECT * FROM image_uploads WHERE THMPATH=?";
$fstmt = $mysqli->prepare($sqlstm);
$fstmt->bind_param("s", $passedID);
$fstmt->execute();
$fstmt->store_result();
$json = $fstmt->get_result()->fetch_assoc();
foreach ($json as $value) {
$val1 = $value['THMPATH']; // this is empty, why???
$sql = "UPDATE image_uploads SET IMGNAME=? WHERE THMPATH=?";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("ss", $val1, $passedID);
$stmt->execute();
$stmt->close();
}
$fstmt->close();
$mysqli->close();
?>
出于一个奇怪的原因,我无法解释变量 $value
形成的 SELECT
查询是空的。
正如您在示例中看到的那样,我得到的 THMPATH
绝对不是空的,我也对下面的 UPDATE
使用了相同的值。如果我使用 $val1 = "Wololo"
之类的东西,它就可以正常工作。
为什么我的 $value
(在本例中为 $value['THMPATH']
)是空的?这没有意义?
更新
当运行宁file_put_contents('../session/log.txt', print_r($json, true));
结果是这样:
Array
(
[ID] => 511
[OWNER] => User Name
[IMGNAME] => Wagirigoingi
[IMGTAGS] => image, photo, picture
[IMGPATH] => 1028525690.jpg
[THMPATH] => ../thumbnails/5560921208_username.jpg
etc..
)
所以 select 有效,但我仍然无法获取值。
您的结果是数组中的单个记录。当你执行 foreach ($json as $value)
时,$value
将有 511、用户名、Wagirigoingi 等。在某些时候,$value
将具有与 $json
数组中的 THMPATH 对应的值,但是 $value
永远不会是一个数组,所以 $value['THMPATH']
永远不会有效。
您可能想要的是完全消除 foreach
循环。
我正在尝试一些非常简单的事情,但由于某种原因,它无法像我预期的那样工作。为此,我想 select 一个特定的行,然后通过更新将该行分配给另一个 table。
这是我想要的脚本 运行:
<?php
$passedID = $_POST["upvotedurl"];
$mysqli = new mysqli('localhost', 'root', '', 'osscom_users_test');
$sqlstm = "SELECT * FROM image_uploads WHERE THMPATH=?";
$fstmt = $mysqli->prepare($sqlstm);
$fstmt->bind_param("s", $passedID);
$fstmt->execute();
$fstmt->store_result();
$json = $fstmt->get_result()->fetch_assoc();
foreach ($json as $value) {
$val1 = $value['THMPATH']; // this is empty, why???
$sql = "UPDATE image_uploads SET IMGNAME=? WHERE THMPATH=?";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("ss", $val1, $passedID);
$stmt->execute();
$stmt->close();
}
$fstmt->close();
$mysqli->close();
?>
出于一个奇怪的原因,我无法解释变量 $value
形成的 SELECT
查询是空的。
正如您在示例中看到的那样,我得到的 THMPATH
绝对不是空的,我也对下面的 UPDATE
使用了相同的值。如果我使用 $val1 = "Wololo"
之类的东西,它就可以正常工作。
为什么我的 $value
(在本例中为 $value['THMPATH']
)是空的?这没有意义?
更新
当运行宁file_put_contents('../session/log.txt', print_r($json, true));
结果是这样:
Array
(
[ID] => 511
[OWNER] => User Name
[IMGNAME] => Wagirigoingi
[IMGTAGS] => image, photo, picture
[IMGPATH] => 1028525690.jpg
[THMPATH] => ../thumbnails/5560921208_username.jpg
etc..
)
所以 select 有效,但我仍然无法获取值。
您的结果是数组中的单个记录。当你执行 foreach ($json as $value)
时,$value
将有 511、用户名、Wagirigoingi 等。在某些时候,$value
将具有与 $json
数组中的 THMPATH 对应的值,但是 $value
永远不会是一个数组,所以 $value['THMPATH']
永远不会有效。
您可能想要的是完全消除 foreach
循环。