次のコードがあります。
$countQuery = "SELECT ARTICLE_NO FROM ? WHERE upper(ARTICLE_NAME) LIKE '% ? %'";
if ($numRecords = $con->prepare($countQuery)) {
$numRecords->bind_param("ss", $table, $brand);
$numRecords->execute();
$data = $con->query($countQuery) or die(print_r($con->error));
$rowcount = mysql_num_rows($data);
$rows = getRowsByArticleSearch($query, $table, $max);
$last = ceil($rowcount/$page_rows);
}
これはうまくいくはずです。ただし、次のエラーが表示されます。
SQL 構文にエラーがあります。near '? を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。WHERE upper(ARTICLE_NAME) LIKE '%?%'' at line 1
私が入れたら
SELECT ARTICLE_NO FROM AUCTIONS WHERE upper(ARTICLE_NAME) LIKE '% o %';
クエリは正常に機能します。$table は上記で定義され、クエリは GET から受信され、両方とも正しい有効な値です。なぜこれが失敗するのですか?
編集: に変更:
$countQuery = "SELECT ARTICLE_NO FROM AUCTIONS1 WHERE upper(ARTICLE_NAME) LIKE '% ? %'";
if ($numRecords = $con->prepare($countQuery)) {
$numRecords->bind_param("s", $query);
エラーが発生します:
警告: mysqli_stmt::bind_param() [mysqli-stmt.bind-param]: 変数の数が、C:\Program Files\EasyPHP 3.0\www\prog\get_records.php の準備されたステートメントのパラメーターの数と一致しません。 38
コマンドが同期していません。現在、このコマンドを実行することはできません
一方
$countQuery = "SELECT ARTICLE_NO FROM AUCTIONS1 WHERE upper(ARTICLE_NAME) LIKE ?";
if ($numRecords = $con->prepare($countQuery)) {
$numRecords->bind_param("s", "%".$query."%");
結果は
致命的なエラー: 38 行目の C:\Program Files\EasyPHP 3.0\www\prog\get_records.php で参照によってパラメーター 2 を渡すことはできません
そして最後に
$countQuery = "SELECT ARTICLE_NO FROM AUCTIONS1 WHERE upper(ARTICLE_NAME) LIKE ? ";
if ($numRecords = $con->prepare($countQuery)) {
$numRecords->bind_param("s", $query);
のみを与えます:
コマンドが同期していません。現在、このコマンドを実行することはできません
LIKEステートメントにパラメーターを使用することは不可能ですか?