【发布时间】:2014-09-04 17:15:54
【问题描述】:
我正在从事一个学习 OOP 的个人项目。我创建了这个通用方法来插入表,但我做不到。 $dbAttributes 是表中没有 id 的字段列表。我传递了一个对象实例,例如,带有 category_id、product_name、price 等属性集的产品。当我尝试使用 foreach 循环绑定值时,问题就来了。
我收到错误:
SQLSTATE[HY000]:一般错误:1366 整数值不正确
然后在我从占位符中删除单引号后,我得到:
SQLSTATE[42000]:语法错误或访问冲突:1064
public static function create($obj) {
global $db;
$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$dbAttributes = $obj->db_fields;
$colonValues = array();
for($i=0;$i<count(array_values($dbAttributes));$i++){
$colonValues[] = ':'.$dbAttributes[$i];
}
$sql ="INSERT INTO ".$obj::$tableName."(";
$sql .=join(",", array_values($dbAttributes));
$sql .= ") VALUES('";
$sql .= join("','",array_values($colonValues));
$sql .= "')";
try {
$stmt = $db->prepare($sql);
foreach($colonValues as $k=>$value){
$rs = $obj->$dbAttributes[$k];
//if($k!=0){
$stmt->bindParam($value, $rs);
echo gettype($rs)." ". $rs."<br>";//}
}
var_dump($sql);
$numRowsAffected = $db->exec($sql);
} catch (Exception $ex) {
echo $ex->getMessage();
}
}
如您所见,我正在尝试动态创建 SQL 并动态绑定值。我尝试了所有方法,还阅读了有关使用表名使用反引号的论坛,但没有解决问题。
【问题讨论】:
标签: php pdo insert prepared-statement