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