【问题标题】:PHP Mysqli prepared statement select fetch_assoc gives empty resultPHP Mysqli 准备好的语句 select fetch_assoc 给出空结果
【发布时间】:2020-01-08 03:05:11
【问题描述】:

我正在尝试一些非常简单的方法,但由于某种原因,它不会像我预期的那样工作。为此,我想选择一个特定的行,然后通过更新将该行分配给另一个表。

这是我要运行的脚本:

<?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..
)

所以选择有效,但我仍然无法获取值。

【问题讨论】:

  • 它是$fstmt-&gt;get_result()-&gt;fetch_assoc(); 的结果,该表本身只有几个成员,例如IMGPATHIMGNAME 等。并且所有这些值都 100% 不为空。但我仍然得到一个空结果,对于所有这些..当我用mysqli_num_rows() 测试它时,我也得到了 1 行,似乎我无法获得该行的值..
  • 脚本在一个单独的文件中运行,所以我很难得到 print_r,因为我没有使用任何 IDE。我会尝试获取输出,然后更新我的问题。
  • 好的,成功了!非常感谢你的提示。但至于 $json 的结果,正如我所说。我已经更新了这个问题,但是 $json 中应该有什么。我只是无法得到这些值。
  • 我没那么快。更新现在在那里。我可能应该说I'm going to ^^
  • 我只是使用了你给我的代码..无论如何,这真的重要吗?结构应该是正确的,我在项目的其他地方也使用过这段代码。到目前为止它一直有效。知道结构不会改变这一点。

标签: php mysqli prepared-statement


【解决方案1】:

您的结果是数组中的一条记录。当您执行foreach ($json as $value) 时,$value 将具有 511、用户名、Wagirigoingi 等。在某些时候,$value 将具有与 $json 数组中的 THMPATH 对应的值,但在任何时候都不会 $value是一个数组,所以$value['THMPATH'] 永远不会有效。

您大概想要的是完全消除 foreach 循环。

【讨论】:

  • 听起来不错,你能给我一个代码示例吗,我正在努力理解我需要如何编写它.. 并感谢您迄今为止的帮助。
  • 正是你所拥有的,但删除 foreach 行,以及关闭该循环的 }
  • 是的,我现在把它改了.. $json$value 并删除了循环。我现在明白这是如何工作的。非常感谢,你的帮助真是太棒了!
  • 看看数据结构的重要性。 :-)
  • 是的,直到现在我才意识到我提到的其他实现也是错误的并且不起作用..哈哈,我的错。谢谢你这么坚持:)
猜你喜欢
  • 1970-01-01
  • 2014-05-18
  • 1970-01-01
  • 1970-01-01
  • 2016-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-20
相关资源
最近更新 更多