我正在编写一个函数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();
答案 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);