そのため、私はしばらくの間、多くのプロジェクトでプリペアドステートメントを使用しており、MySQLデータベースと対話するための非常にクリーンな方法でしたが、今日、奇妙な問題に遭遇しました。
私のプリペアドステートメントはSQLステートメントに'を追加し始めました、そして私の人生の間、私は理由がわかりません...
だからここにコードがあります:
<?php
$sortby="ORDER BY submit_date DESC";
$offset = 3;
$sql = "SELECT img_id, img_name, submit_date FROM tbl_images WHERE img_active='y' :sortby LIMIT :offset, 9";
$stmt = $this->_db->prepare($sql);
$stmt->bindParam(":sortby", $sortby, PDO::PARAM_STR);
$stmt->bindParam(":offset", $offset, PDO::PARAM_INT);
$stmt->execute();
?>
上記は何も返さないので、データベースログを見ると、クエリは次のようになります。
SELECT img_id, img_name, submit_date FROM tbl_images WHERE img_active='y' 'ORDER BY submit_date DESC' LIMIT 3, 9
「ORDERBYsubmit_dateDESC」の周りに''の余分なセットを配置したようですが、オフセットの周りにはまだありませんか?
誰かが私を怒らせているので問題を見つけることができますか:)
前もって感謝します!
解決策、投稿してくれた人たちのおかげで、あなたは正しかったです。私はフィールドをパーツに分割し、魅力のように機能します。以下のコードソリューション:
<?php
$sortfield="submit_date";
$sortway="DESC"
$offset = 3;
$sql = "SELECT img_id, img_name, submit_date FROM tbl_images WHERE img_active='y' ORDER BY :sortfield :sortway LIMIT :offset, 9";
$stmt = $this->_db->prepare($sql);
$stmt->bindParam(":sortfield", $sortfield, PDO::PARAM_STR);
$stmt->bindParam(":sortway", $sortway, PDO::PARAM_STR);
$stmt->bindParam(":offset", $offset, PDO::PARAM_INT);
$stmt->execute();
?>