sql >> データベース >  >> RDS >> Mysql

SQLSTATE [HY093]:無効なパラメーター番号:バインドされた変数の数が102行目のトークンの数と一致しません

    ここですべてのバインディングをバインドしていません

    $sql = "SELECT SQL_CALC_FOUND_ROWS *, UNIX_TIMESTAMP(publicationDate) AS publicationDate     FROM comments WHERE articleid = :art 
    ORDER BY " . mysqli_escape_string($order) . " LIMIT :numRows";
    
    $st = $conn->prepare( $sql );
    $st->bindValue( ":art", $art, PDO::PARAM_INT );
    

    :numRowsというバインディングを宣言しましたが、実際には何もバインドしていません。

    2019年の更新:私はこれに賛成票を集め続けており、それは私に別の提案を思い出させました

    二重引用符はPHPの文字列補間であるため、二重引用符の文字列で変数を使用する場合は、concat演算子を使用しても意味がありません。反対に、一重引用符は文字列補間ではないため、文字列の最後に1つの変数しかない場合は、意味があります。または、文字列全体に使用することもできます。

    実際、インタプリタは変数の文字列の解析を気にしないため、ここで利用できるマイクロオペレーションがあります。ブーストはほとんど気付かれず、小規模では完全に無視できます。ただし、非常に大規模なアプリケーション、特に古き良きレガシーモノリスでは、このように文字列を使用すると、パフォーマンスが著しく向上する可能性があります。 (そしてIMO、とにかく読みやすいです)




    1. SQLiteのJSON関数と演算子(全リスト)

    2. MySQLは同時挿入をどのように処理しますか?

    3. 破損したTOASTテーブルの修正

    4. mySQLクエリ複数-エラーmysql_fetch_arrayを返します