在php&中使用准备好的语句mysqli的

时间:2015-03-16 21:44:59

标签: php mysql mysqli

我第一次使用预备语句。我无法让选择工作。 由于某种原因,它返回所有记录,但我无法将它们变为变量。我知道它会返回所有记录,因为如果我将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()

我找到了一个相同问题的链接,但我不明白如何实现修复。 关于一个例子,任何帮助都会很棒。

How to remove the fatal error when fetching an assoc array

1 个答案:

答案 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方法。