我在准备好的语句中使用bindParam将行插入表中时遇到一些问题。

这是我的代码。

$table = 'companies';
$fields = array('name', 'address', 'phone');
$values = array('Company Name', 'Company address', '555-9999999');

$sql = 'INSERT INTO '.$table.' ('.implode(', ', $fields).') VALUES ('
                   .substr(str_pad('', (count($fields) * 3), '?, '), 0, -2).')';

$statement = $db->prepare($sql);

for ($i = 1; $i <= count($fields); $i++) {
   $statement->bindParam($i, $$fields[$i-1]);
}

for ($i = 0; $i < count($fields); $i++) {
   ${$fields[$i]} = $values[$i];
}

try {
   $result = $statement->execute();
   $this->rowCount = $result ? $statement->rowCount() : 0;
}
catch (Exception $ex) {
   $this->error = $ex;
   $result = false;
}


$ sql变成一个字符串,例如“ INSERT INTO公司(名称,地址,电话)VALUES(?,?,?)”

在将参数绑定到一些变量并为这些变量赋值之后,我执行该子句,但是什么也没有发生,只是$ result为false,但没有错误。即,程序的执行不会进入catch块。

代码有什么问题?有什么解释吗?

谢谢您的帮助。

最佳答案

我终于解决了。就我而言,问题在于我有一个DateTime,因为我有一个DateTime字段,所以我尝试将其直接存储在数据库中。

解决方案:将DateTime字段转换为String做

$dateTimeField->format('Y-m-d H:i:s')

关于php - 使用bindParam的PDO语句中的奇怪行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30778265/

10-09 07:22