PDOException消息SQLSTATE [42000] [split sql]

时间:2016-02-28 13:42:18

标签: php mysql pdo

我知道有很多线程有相同的错误,但没有人帮助我。

所以我安装文件nag给我错误:

  

致命错误:未捕获的异常' PDOException' with message' SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,以便使用接近' - 表结构portfolio - DROP TABLE IF EXIST'在第1行'在C:\ wamp \ www \ portfolio \ install \ index.php:169堆栈跟踪:

     

0 C:\ wamp \ www \ portfolio \ install \ index.php(169):PDO->查询(' \ xEF \ xBB \ xBF - \ r \ n \ n \ \ xD0 \ xA1 \ xD1 \ x82 \ xD1 ...')

     

在第169行的C:\ wamp \ www \ portfolio \ install \ index.php中抛出1 {main}

install / index.php中第169行的

是:

$error = '';
    @ set_magic_quotes_runtime(0);
    $query = fread(fopen('install.sql', 'r'), filesize('install.sql'));
    $pieces = split_sql($query);
    for ($i = 0; $i < count($pieces); $i++) {
        $pieces[$i] = trim($pieces[$i]);
        if (!empty ($pieces[$i]) && $pieces[$i] != "#") {
            if (!$pdo->query($pieces[$i]) ) {    //this is 169 line
                $error = $error . $pdo->error() . '<br />';
            }
        }
    }

和split_sql函数:

function split_sql($sql) {
    $sql = trim($sql);
    $sql = ereg_replace("\n#[^\n]*\n", "\n", $sql);
    $buffer = array();
    $ret = array();
    $in_string = false;
    for ($i = 0; $i < strlen($sql) - 1; $i++) {
        if ($sql[$i] == ";" && !$in_string) {
            $ret[] = substr($sql, 0, $i);
            $sql = substr($sql, $i + 1);
            $i = 0;
        }
        if ($in_string && ($sql[$i] == $in_string) && $buffer[1] != "\\") {
            $in_string = false;
        }
        elseif (!$in_string && ($sql[$i] == '"' || $sql[$i] == "'") && (!isset ($buffer[0]) || $buffer[0] != "\\")) {
            $in_string = $sql[$i];
        }
        if (isset ($buffer[1])) {
            $buffer[0] = $buffer[1];
        }
        $buffer[1] = $sql[$i];
    }
    if (!empty ($sql)) {
        $ret[] = $sql;
    }
    return ($ret);
}

为什么脚本会出现此错误?

0 个答案:

没有答案