我在准备好的语句中使用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块。
代码有什么问题?有什么解释吗?。
感谢您的帮助。
答案 0 :(得分:0)
我终于解决了这个问题。在我的例子中,问题是我有一个DateTime,我试图直接存储在数据库中,因为我有一个DateTime字段。
解决方案:将DateTime字段转换为执行字符串
$dateTimeField->format('Y-m-d H:i:s')