我第一次使用预备语句。我无法让选择工作。
由于某种原因,它返回所有记录,但我无法将它们变为变量。我知道它会返回所有记录,因为如果我将echo '1';
添加到循环中,则每条记录的回显为1。
任何帮助都会很棒。代码如下:
function builditems($quote_id){
if ($stmt = $this->link->prepare("SELECT * FROM `0_quotes_items` WHERE `quote_id` = ?")) {
// Bind a variable to the parameter as a string.
$stmt->bind_param("i", $quote_id);
// Execute the statement.
$stmt->execute();
while ($row = $stmt->fetch()) {
echo $row['id'];
}
// Close the prepared statement.
$stmt->close();
}
}
更新
在错误日志中,我在添加while ($row = $stmt->fetch_assoc()) {
之后看到以下错误:
PHP Fatal error: Call to undefined method mysqli_stmt::fetch_assoc()
我找到了一个相同问题的链接,但我不明白如何实现修复。 关于一个例子,任何帮助都会很棒。
答案 0 :(得分:1)
PHP MySQLi fetch
方法不使用括号表示法访问查询数据:$row['id']
。
所以我看到两种补救方法:首先找到这一行:
while ($row = $stmt->fetch()) {
...并将其修改为 ,首先添加bind_result
方法,然后稍微有点不同地访问数据:
$stmt->bind_result($id, $other, $whatnot); // assuming 3 columns retrieved in the query
while ($row = $stmt->fetch()) {
echo "$id $other $whatnot<br>";
}
... 或,首先访问结果对象的fetch_assoc
方法并使用fetch_assoc
代替fetch
:
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
现在,您可以使用表列名作为键来访问循环中的查询数据:$row['id']
。
PHP MySQLi方法fetch
要求您使用bind_result
。这样做允许您通过绑定它的变量名称来调用数据。
要使用字段名称作为结果数组索引,例如:$row['id']
,您需要使用PHP MySQLi fetch_assoc
方法。要使用fetch_assoc
,您需要先获取结果对象才能访问fetch_assoc
方法。