バックグラウンド
- フレームワーク: Codeignighter/PyroCMS
製品のリストを格納する DB があります。重複した製品にduplicate function
' ' 値を追加できるように、共通の製品名を最初に検索するアプリケーションを持っています。suffix
Products モデル クラスのコード
$product = $this->get($id);
$count = $this->db->like('name', $product->name)->get('products')->num_rows();
$new_product->name = $product->name . ' - ' . $count;
2 行目では、$product->name
引用符が含まれている場合にのみアプリケーションが失敗します。Codeignighter がすべての文字列をエスケープしたことを理解していたので、なぜこのエラーが発生するのかわかりません。
そこで、MySQL エスケープ文字列関数を使用しようとしましたが、それも役に立ちませんでした。
エラーメッセージ
A Database Error Occurred
Error Number: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's Book%'' at line 3
SELECT * FROM `products` WHERE `name` LIKE '%Harry\\'s Book%'
var_dump
以下は、問題の行の前後でvar_dump
onを実行した出力です。product->name
string 'Harry's Book' (length=12)
A Database Error Occurred
Error Number: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's Book%'' at line 3
SELECT * FROM `products` WHERE `name` LIKE '%Harry\\'s Book%'