我在mysql和php中遇到错误我的代码:
$stmt->prepare("INSERT `tablename` (col1,col2,col3) VALUES (?,?,?)");
$stmt->bind_param('sss',$_POST['data'],$sub,$yaxis);
$stmt->execute();
我的错误:
Warning: mysqli_stmt::bind_param() [mysqli-stmt.bind-param]: Number of variables doesn't match number of parameters in prepared statement.
但是我在bind_param中传递了3和3个参数。为什么会出现这个错误?
答案 0 :(得分:2)
使用参数索引,因为您没有按名称指定它。
$data = $_POST['data'];
$stmt->prepare("INSERT `tablename` (col1,col2,col3) VALUES (?,?,?)");
$stmt->bind_param(1,$data);
$stmt->bind_param(2,$sub);
$stmt->bind_param(3,$yaxis);
$stmt->execute();
但如果您想按名称使用,则必须指定其参数名称而不是使用问号
$data = $_POST['data'];
$stmt->prepare("INSERT `tablename` (col1,col2,col3) VALUES (:sss,:par1,:par2)");
$stmt->bind_param(":sss",$data);
$stmt->bind_param(":par1",$sub);
$stmt->bind_param(":par2",$yaxis);
$stmt->execute();
答案 1 :(得分:0)
你确定你的$_POST['data']
有价值,而不是直接将表格值传递给bind_param,你可以检查它是否为空。我也注意到你的插入查询是错误的
if(!empty($_POST['data'])){
$mydata=$_POST['data'];
}else{
$mydata='No values';
}
$stmt->prepare("INSERT into `tablename` (col1,col2,col3) VALUES (?,?,?)");//Query wrong
$stmt->bind_param('sss',$mydata,$sub,$yaxis);
$stmt->execute();
答案 2 :(得分:0)
好吧,要么$ _POST分配了多个变量,要么没有。
这将打印整个$ _POST数组的内容:
print_r($_POST);
答案 3 :(得分:0)
好吧,我知道这让我听起来很愚蠢,但错误是由脚本中的一个未定义的变量引起的,我现在已经修复了。我认为它不会影响脚本的这一部分,但确实如此。发布的所有答案都很棒,但由于我的错,他们没有回答这个问题。