使用bindParam的PDO语句中的奇怪行为

时间:2015-06-11 10:27:20

标签: php mysql pdo

我在准备好的语句中使用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变成了一个字符串,如&#34; INSERT INTO公司(姓名,地址,电话)VALUES(?,?,?)&#34;

将params绑定到某些变量并为这些变量赋值后,我执行该子句但没有任何反应,只是$ result为false但没有错误。也就是说,程序的执行不会进入catch块。

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我终于解决了这个问题。在我的例子中,问题是我有一个DateTime,我试图直接存储在数据库中,因为我有一个DateTime字段。

解决方案:将DateTime字段转换为执行字符串

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