1

このクエリを使用すると、MySQL 構文エラー (1064) が発生します。私は SO に関する数十の mysql 構文の質問を精査し、狂ったようにグーグルで検索し、この SQL ステートメントを無駄に見つめてきました。ステートメントを実行する前に、mysqli の real_escape_string() を使用しています。私は(絶望的に)クエリからすべての改行を削除しようとしましたが、これは役に立ちません。エラーの原因は何ですか?

INSERT INTO `file_upload`.`files` (
    `id`,
    `name`,
    `user_id`
) 
VALUES (
    NULL,
    'filename.txt',
    1
)

私が得ているエラーにはメッセージがあります:

... 1 行目の '\'filename.txt\',1)' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

編集

これがPHPコードです。接続は mysqli オブジェクトです。

public function add_file_to_user($file, $user_id) {
    $query = "INSERT INTO `file_upload`.`files` (`id`,`name`,`user_id`) VALUES (NULL,'$file->name',$user_id)";
    $res = $this->query($query);
    die($this->connection->errno . $this->connection->error);
}

private function query($str) {
    $str = $this->connection->real_escape_string($str);
    return $this->connection->query($str);
}
4

4 に答える 4

3

どうぞ:

private function query($str) {
    $str = $this->connection->real_escape_string($str);
    return $this->connection->query($str);
}

クエリ全体をエスケープしています。渡す変数をエスケープするだけです。

public function add_file_to_user($file, $user_id) {
    $filename = $this->connection->real_escape_string($file->name);

    $query = "INSERT INTO `file_upload`.`files` (`id`,`name`,`user_id`) VALUES (NULL,'$filename',$user_id)";
    $res = $this->query($query);
}

private function query($str) {
    return $this->connection->query($str);
}

(動作確認はしていませんが)

于 2012-09-06T19:21:11.293 に答える
2

それを試してみてください:

    $query = "INSERT INTO `file_upload`.`files` (`id`,`name`,`user_id`) VALUES (NULL,'$file->name',$user_id)";

また

    $query = "INSERT INTO `file_upload`.`files` (`id`,`name`,`user_id`) VALUES (NULL,'$file->name','$user_id')";
于 2012-09-06T19:19:41.853 に答える
2

ほとんどの場合、ある時点で逃げ過ぎているようです。コードを確認してください。これは実行しているクエリではありません。

文字列をエスケープする代わりに、クエリ全体をエスケープしているのではないかと思います。

于 2012-09-06T19:13:05.447 に答える
2

エラー ( '\'filename.txt\',1)') を見ると、ファイル名を囲む一重引用符がエスケープされており、このエラーがスローされているようです。INSERTクエリをエスケープしているようです。

于 2012-09-06T19:13:42.860 に答える