我在准备好的语句中使用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/