准备好的声明:PHP警告:mysqli_stmt :: bind_param()

时间:2016-12-21 20:42:51

标签: php mysql mysqli prepared-statement

我正在编写一个函数dbInsert()来尽可能地自动执行该过程并简化我的代码的可读性,并且我对准备好的语句有问题(之前经过测试并且完全正常工作) )。

这是代码:

$stmt = $GLOBALS['conn']->prepare('INSERT INTO '.$table.' ('.$dbColumnSTR.') VALUES ('.$qmSTR.')');
print_r($stmt);
$stmt->bind_param('"'.$dataTypeSTR.'"', $inputValueSTR);
$stmt->execute();
$stmt->close();

其中

  • $dbColumnSTR =包含列'的内爆数组姓名(姓名,代码,价格,节目)
  • $qmSTR =一个内爆数组,其中?的值为(?,?,?,?)
  • $dataTypeSTR =包含所有值的内爆数组'类型(sssi)
  • $inputValueSTR =包含所有值的内爆数组(test,DK4,49.5,2)
  • 我在查询结果中得到此信息:PHP Warning: mysqli_stmt::bind_param(): Number of elements in type definition string doesn't match number of bind variables

    由于我唯一改变的是在$name, $code, $price, $shows中没有提供变量$stmt->bind_param(),而是直接带有值的字符串,这可能是问题吗?不然怎么可能呢?

    这是我的查询出现的方式(我猜):

    $stmt = $GLOBALS['conn']->prepare('INSERT INTO tabletest (name, code, price, shows) VALUES (?, ?, ?, ?)');
    $stmt->bind_param("sssi", est, DK4, 49.5, 2);
    $stmt->execute();
    $stmt->close();
    

    1 个答案:

    答案 0 :(得分:-1)

    你应该使用它:

    //I assume that you have data to store something like this
    
    $inputValueSTR=array("sss",$value_first, $value_second, $value_third);
    $inputValueSTR= implode(", ", $inputValueSTR);
    $stmt->bind_param($inputValueSTR);
    

    数组中的第一个参数用于相应索引值中的数据类型。你可以看到她:mysqli-stmt.bind-param.php

    因为我看到你的决赛是:$stmt->bind_param("ssdi", est, DK4, 49.5, 2); 它应该是$stmt->bind_param("ssdi", "est", "DK4", 49.5, 2);

    $stmt->bind_param("sssi", "est", "DK4", "49.5", 2);