【问题标题】:Issue with a php prepared statement throwing a null errorphp 准备好的语句引发空错误的问题
【发布时间】:2018-04-14 21:34:54
【问题描述】:

我遇到的问题似乎是我创建准备好的 sql 语句以插入一些数据的方式存在错误。我的第一个想法是有些东西是空的,但我知道数据在那里,因为我已经用回声对其进行了测试。我的想法是它必须与语句的编写方式有关,但我无法弄清楚它可能有什么问题。

代码:

// Set up the sql command
    $stmt = $mysqli->prepare("INSERT INTO tblcomments (imgpath, author, comment) VALUES(?, ?, ?)");
    // Bind the data
    $stmt->bind_param("imgpath", $imagePath);
    $stmt->bind_param("author", $author);
    $stmt->bind_param("comment", $comment);
    // Execute the sql
    $stmt->execute();
    // Close the statement
    $stmt->close();

问题出在insert语句本身,至少根据错误是:

Fatal error: Uncaught Error: Call to a member function prepare() on null in D:\Inetpub\vhosts\kreativecoating.com\httpdocs\commentDataPostHandler.php:55 Stack trace: #0 {main} thrown in D:\Inetpub\vhosts\kreativecoating.com\httpdocs\commentDataPostHandler.php on line 55

第 55 行是插入语句的行。所以我的问题是我对准备好的陈述做错了吗?我检查了数据库字段是否有输入错误,所以不是这样。 sql 中没有列出一个 id 字段,但那是键和自动增量,所以它不应该在那里

【问题讨论】:

  • 提示:您的数据库连接失败和/或$mysqli 未初始化。
  • 那里有什么“数据”?错误很明显,无论出于何种原因,$mysqlinull
  • 数据库连接似乎工作正常,我可以看到初始化似乎没有问题> 至于什么数据,它的三个数据是通过应用程序输入的json。它已被检索、解码和分配变量,并且使用 echo 似乎输出正常,它似乎只是 sql 有某种问题,这就是让我发疯的原因
  • 这只是一个猜测,但我敢打赌这是一个变量范围问题。就像您在函数外部初始化 $mysqli 一样,并且您希望使用该变量而不声明它 global。但实际发生的是 PHP 试图引用一个不存在的 local 变量 $mysqli
  • bind_param($types, $variables);是正确的语法。下面回答

标签: php sql insert


【解决方案1】:

绑定参数是一次性的。

bind_param("ssi", $string, $string, $number);

S 表示字符串

i 表示整数

d 代表浮点数/十进制数

我创建了一个实际生成所有代码的查询生成器。只需插入列名即可。它有助于准备查询:)

https://wbr.bz/QueryPro

【讨论】:

  • 谢谢。这似乎是问题所在。它现在工作
  • 没问题,如果有帮助别忘了标记为答案:)
【解决方案2】:

如果您的数据库连接正常,可以在您的 bindParam() 语句上尝试此操作。由于您使用问号插入值,所以它应该是这样的:

$stmt->bindParam(1, $image);

$stmt->bindParam(2, $author);

$stmt->bindParam(3, $comment);

$stmt->执行();

【讨论】:

    猜你喜欢
    • 2014-06-30
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    相关资源
    最近更新 更多