$arr = array (
array ('item'=>'Salt', 'on_hand'=>2, 'cost'=>3.29, 'format'=>'box'),
array ('item'=>'Pepper', 'on_hand'=>1, 'cost'=>2.19, 'format'=>'bag'),
array ('item'=>'Cinnamon', 'on_hand'=>1, 'cost'=>1.55, 'format'=>'shaker'),
);
$sql = "INSERT INTO item_list VALUES (?, ?, ?, ?, ?)";
if (!($stmt=$db->prepare($sql))) {
echo "<br />Prepare failed: (".$db->errno.") ".$db->error; }
foreach($arr as $key) {
$item = $key['item'];
$on_hand = $key['on_hand']; // format 1. $item or format 2. $key[;item']
$cost = $key['cost']; // echo works with both formats...
$format = $key['format']; // stmt->bind neither format works...
echo "<br>$item $on_hand $cost $format<br>"; // first var is auto-increment *NULL*
if (!$stmt->bind_param("isids", null, $key["item"], $key["on_hand"], $key["cost"], $key["format"])) {
echo "<br />Binding failed: (".$stmt->errno.") ".$stmt->error; }
if(!$stmt->execute()) {
echo "<br />Execute failed: (".$stmt->errno.") ".$stmt->error; }
}
经常出现这个错误 - fatal error :无法通过引用传递参数 2 ... 似乎没有任何效果 - 它可能与我的服务器设置有关吗? 我在这个论坛上看到过这种确切的 'stmt->bind_param() 格式,有人说它有效...... PS:还需要从数据库中获取它,所以如果你能告诉我如何取回它,那就太好了 网络上最好的论坛 - 实际有效的最新答案(到目前为止) 这对我有很大的帮助......谢谢一百万 还尝试在循环外使用 stmt->bind_param()... 使用格式 #1
最佳答案
您可以在 INSERT
语句中指定列名,而不添加 AUTO_INCREMENT
列。
INSERT INTO item_list (column2, column3, column4, column5) VALUES (?, ?, ?, ?);
尝试这样的事情:
$stmt=$db->prepare($sql);
$stmt->bind_param("sids", $item, $on_hand, $cost, $format);
foreach($arr as $key) {
$item = $key['item'];
$on_hand = $key['on_hand'];
$cost = $key['cost'];
$format = $key['format'];
$stmt->execute();
}
关于php - msqli stmt->bind error '无法通过引用传递参数 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21806274/