为什么PHP mysqli prepared语句工作,但插入所有空值?

为什么PHP mysqli prepared语句工作,但插入所有空值?,php,mysql,null,mysqli,Php,Mysql,Null,Mysqli,这是什么原因造成的?代码如下: $m = new mysqli($host,$user,$pass,$db); if(mysqli_connect_errno()) die('Connect failed: ' . mysqli_connect_error()); $PrepSQL = "INSERT INTO Products (" . implode(',',$this->cols) . ") VALUES ("; $PrepSQL .= '?,?,?,?,?,?,?,?,?,?,?

这是什么原因造成的?代码如下:

$m = new mysqli($host,$user,$pass,$db);
if(mysqli_connect_errno()) die('Connect failed: ' . mysqli_connect_error());
$PrepSQL  = "INSERT INTO Products (" . implode(',',$this->cols) . ") VALUES (";
$PrepSQL .= '?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
$stmt = $m->prepare($PrepSQL);
if(!$stmt) die('Could not prepare: ' . $m->error . "\n$PrepSQL\n");
$ret = $stmt->bind_param('isissssddssssssssssssssssssssssssisssssss',
      $contents[0], ... bunch of these here ... );
if(!$ret) die('bind_param failed: ' . $m->error);
然后在一个循环中,我有:

$contents = explode('|',$NL); // NL is pipe delimited data
print_r($contents); 
if(!$stmt->execute()) die("Statement failed: " . $m->error);

脚本不会停止,但MySQL中的每个值都是null。大多数类型都是字符串,我认为即使数字类型错误,它们至少也会填充。
print\r
正在正确打印值。

您能否显示从准备语句到执行语句的完整代码


我怀疑第一部分中的$contents与第二部分中的$contents不同。它们必须是对同一数组的引用,因为您是在通过引用绑定后填充它的。

第4行以错误的引号字符结尾。这是我尝试格式化时粘贴后的一个输入错误。是否确定
$this->cols
包含正确的列名?请先进行基本调试。
$contents[0]
包含哪些内容?大家好,谢谢回复。如上所述,代码执行时没有警告,也没有错误。打印输出$此->cols包含正确的数据(即$content很好)和$content[0]=>467187964。。。mysql得到了插入,我有一些默认列,一个auto inc PK和一个timestamp,它们被填充得很好,但是所有其他列都是空的。谢谢大家的回答,我想你是对的。我的PHP技能非常落后。再做一次作业可能是在做别的事情。