2016-04-17 47 views
0

メッセージで「PDOException」がキャッチされました。エラーが発生しました。エラーは次のとおりです。'SQLSTATE [42000]:構文エラーまたはアクセス違反:1064

致命的なエラー:メッセージでキャッチされない例外「PDOException」「SQLSTATE [42000]:構文エラーまたはアクセス違反:1064あなたは、あなたのSQL構文でエラーが発生しています。あなたのMySQLサーバのバージョンに対応するマニュアルを調べて、正しい構文がINSERT INTO guildchat(guildID、playerID、message、 `time`、chattime)の近くで使用されるようにしてください。VALUES(?、?、 'C:\ xampp \\ htdocs \ sf \ sexyutility.php:14 スタックトレース:#0 C:\ xampp \ htdocs \ sf \ sexyutility.php(14):PDO-> prepare( 'SELECT @cht:= ...')#1 C:\ xampp \ htdocs \ req.php(2659):chatInsert( 'tewtewt'、53,35)#2 にスローされたメイン#オンライン

コードは次のとおりです。

function chatInsert($message, $guild, $player){ 
    $time = time(); 
    $chattime = $GLOBALS['db']->prepare("SELECT @cht := Max(chattime) AS chattimer FROM guildchat WHERE guildID = :guild; INSERT INTO guildchat(guildID, playerID, message, `time`, chattime) VALUES(:guild, :player, :msg, :timers, @cht + 1)"); 
    $chattime->bindParam(":guild", $guild); 
    $chattime->bindParam(":player", $player); 
    $chattime->bindParam(":msg", $message); 
    $chattime->bindParam(":timers", $time); 
    $chattime->execute(); 
    return $chattime->fetch(PDO::FETCH_ASSOC)['chattimer'] + 1; 
} 
+1

エラーは、挿入クエリに構文エラーがあると言います。今あなたの質問は何ですか? –

+0

別の実行中のスクリプトが 'SELECT'クエリと' INSERT'クエリの間に同じ 'chattime'を持つ行を挿入しないという保証はありません。 [トランザクション](http://php.net/manual/en/pdo.begintransaction.php)と[分離レベル](http://dev.mysql.com/doc/refman/5.7/en/set)を調べてください。 -transaction.html)を参照してください。 –

+0

sexyutility.php? – brimstone

答えて

0

PDOで一度に1つのクエリしか作成できません。あなたは2つを実行しています。 2つの別々のステートメントでそれを行う必要があります。

私は間違っていたと思います。答えを削除する代わりに、このリンクを参考にしておきます。

PDO Support for multiple queries

それは、しかし、いくつかの注意点と、サポートされています。

+2

[PDO_MYSQL、PDO_MYSQLND]の[PDOサポート](http://stackoverflow.com/questions/6346674/pdo-support-for-multiple-queries-pdo-mysql-pdo-mysqlnd)によると、PDO *は*実際には、一度に複数のクエリをサポートします。確かに、OPのコードはうまく動作します。しかし、構文エラーは、これがここでの問題であることを意味します... –

関連する問題