我为我的dao创建了一个生成插入查询的函数,这个简单的查询会产生语法错误。
我甚至检查了mysql保留字并将其添加到函数中,所以当它们出现时会得到反引号。
public static function buildInsert(&$db, $oTable) {
$db = db::get();
$q = "INSERT INTO " . $oTable->table . " ";
$class = get_class($oTable);
$q .= '(';
$i = 0;
foreach ($class::$arTableFields as $key => $value) {
$i++;
if ($oTable->primaryKey == $class::$arTableFields[$key])
continue;
if (empty($oTable->arAssoc[$key]))
continue;
if (in_array($key, db::$reservedMysqlWords))
$key = "`" . $key . "`";
$q .= $key;
$q .= ($i == sizeof($class::$arTableFields) ? '' : ',');
}
$q .= ')';
$q .= ' VALUES (';
$i = 0;
foreach ($class::$arTableFields as $key => $value) {
$i++;
if ($oTable->primaryKey == $class::$arTableFields[$key])
continue;
if (empty($oTable->arAssoc[$key]))
continue;
$q .= (!empty($oTable->arAssoc[$key]) ? (is_numeric($oTable->arAssoc[$key]) ? $oTable->arAssoc[$key] : "'" . $db->real_escape_string($oTable->arAssoc[$key]) . "'") : "' '");
$q .= ($i == sizeof($class::$arTableFields) ? '' : ',');
}
$q .= ') ';
return $q;
}
现在,当我抛出一个填充的表对象时,它会生成以下字符串:
INSERT INTO客户 (名字,姓氏,电子邮件,密码,joindate,通讯,banknumber,街道,
number
,邮编,国家,城市,discountpoints) VALUES('david','errrr','ddd @ asdde.com','#$ Dasd21143','0000-00-00 00:00:00' ,1,32, '布拉布拉',138 '3153BB', '香港', '巴黎',6)
导致`查询错误:
您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 在''第1行'附近