これは私のコードです:
$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);