bind中的参数与绑定字段的数量不匹配?

时间:2016-02-12 14:48:38

标签: php sql mysqli

我正在使用mysqli对db执行查询。这是我的代码:

if($stmt = $connection->prepare("SELECT * FROM table1 WHERE code = ?"))
{
    $find = "Op";
    $stmt->bind_param("s", $find);
    $stmt->execute(); 
    $stmt->bind_result($res);
    $stmt->fetch();
    echo "Res => " . $res;
    $stmt->close();
}

现在问题出在这一行:$stmt->bind_param("s", $find); 我收到这个错误:

  

警告:mysqli_stmt :: bind_param():类型定义字符串中的元素数与绑定变量数不匹配

注意:$connection包含与数据库建立的连接。我做错了什么?

2 个答案:

答案 0 :(得分:0)

您的bind_param()方法没问题。问题在于这个陈述,

$stmt->bind_result($res);

SELECT语句中,您正在执行SELECT * FROM ...,但在->bind_result()方法中,您尝试仅使用变量{{1}绑定一个结果列}。

所以你的$res声明应该是这样的:

prepare()

稍后,如果你想循环它,你可以这样做:

$stmt = $connection->prepare("SELECT column1 FROM table1 WHERE code = ?")

答案 1 :(得分:-1)

按照正确的方式:

<?php
/* Execute a prepared statement by binding PHP variables */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < ? AND colour = ?');
$sth->bindParam(1, $calories, PDO::PARAM_INT);
$sth->bindParam(2, $colour, PDO::PARAM_STR, 12);
$sth->execute();
?>

在您的情况下,它将是这样的: 已修改

if($stmt = $connection->prepare('SELECT * FROM table1 WHERE code = ?'))
{
    $find = 'Op';
    $stmt->bind_param(1, $find, PDO::PARAM_STR);
    $stmt->execute(); 
    // Fetch column data
    // $result = $sth->fetchColumn(2);
    // Fetch all data
    // $result = $sth->fetchAll();
    // echo "<pre>";
    // print_r($result);
    // Fetch only some columns data.

    $stmt->bindColumn(2, $cals);

    while ($row = $stmt->fetch(PDO::FETCH_BOUND)) {
      print $cals . "</br>";
    }       
}

注意:

  

您可以指定所需的列数据。

示例:

  

您的表格中包含colone,coltwo,colthree,colfour等列。   您编写查询:select * from tablename。现在你想只显示2   column(colone,colthree),你可以使用bindcolumn()。你必须使用   像这样:$ stmt-&gt; bindColumn('colone',   $ cal1); $ stmt-&gt; bindColumn('colthree',$ cal3); *