php - pdoステートメントで制限値をバインドする方法

原文 php mysql pdo

これは私のコードです:

$sql="SELECT duration,address,roozhaye_bargozari, ";
        $sql.="ostan_name,city_name,cluster_name,education_node.name ";
        $sql.="FROM class ";
        $sql.="LEFT JOIN education_cluster ec ON ec.id=class.cluster_id ";
        $sql.="LEFT JOIN education_node ON education_node.id=class.node_id ";
        $sql.="LEFT JOIN ostan ON ostan.id=class.ostan_id ";
        $sql.="LEFT JOIN city ON city.id=class.city_id ";
        $sql.="WHERE class.master_id=? LIMIT ?,?";

        $result=$db->prepare($sql);
        $result->execute(array($master_id,$startpos,$endpos));
        $final_result=$result->fetchAll(PDO::FETCH_ASSOC);


このコードを使用すると、このエラーメッセージが表示されます:
PDOException:SQLSTATE [42000]:構文エラーまたはアクセス違反:1064 SQL構文にエラーがあります。 MySQLサーバーのバージョンに対応するマニュアルで、C:\ wamp \ www \ fani \ inc \ class \ user.phpの239行目の1行目の '' 0 '、' 2 ''付近で使用する正しい構文を確認してください

しかし、これを使用すると:

.
.
.
$sql.="WHERE class.master_id=? LIMIT $startpos,$endpos";

        $result=$db->prepare($sql);
        $result->execute(array($master_id);
        $final_result=$result->fetchAll(PDO::FETCH_ASSOC)


コードは正しく実行されますが、問題は何ですか?
答え
エラーをよく見てください...


「0」、「2」


そこでの引用に気づいてください。 executeは、単一引用符を追加して整数を文字列として扱うため、クエリが失敗する原因となっています。 2番目のクエリが機能する理由は、数値をバインドするのではなく、クエリに直接挿入するためです。それを機能させるためには、このようなことをする必要があります...

$result=$db->prepare($sql);
$result->bindParam(1, $master_id, PDO::PARAM_INT);
$result->bindParam(2, $startpos, PDO::PARAM_INT);
$result->bindParam(3, $endpos, PDO::PARAM_INT);
$result->execute();
$final_result=$result->fetchAll(PDO::FETCH_ASSOC);
関連記事

php - mysqlデータベースからblob画像として取得すると画像が壊れる

php - Symfony2:ルーターは正しいコントローラーを使用していません

php - Symfony2 PHP制限1ユーザーセッション20

javascript - SVGパスが互いに隣接しているかどうかを確認しますか?

php - symfony2 phpunit-機能テストエラー(host_with_path)

php - スパークラインでの動的データの解析

javascript - データがJavaScriptからPHPに渡されないのはなぜですか

javascript - jquery onchangeが機能していません

php - Woocommerceで属性を取得する

php - 非オブジェクト日付形式でのメンバー関数format()の呼び出し