bind_param数字参数不等于变量

时间:2012-09-29 03:57:36

标签: php mysql

我在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个参数。为什么会出现这个错误?

4 个答案:

答案 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)

好吧,我知道这让我听起来很愚蠢,但错误是由脚本中的一个未定义的变量引起的,我现在已经修复了。我认为它不会影响脚本的这一部分,但确实如此。发布的所有答案都很棒,但由于我的错,他们没有回答这个问题。