语法错误:在第1行mysql附近使用正确的语法

时间:2013-08-24 01:09:28

标签: php mysql

我为我的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行'附近

0 个答案:

没有答案