0

わかりましたので、テーブル名と列にプレースホルダーを使用できないことがわかりました

$table = 'users';

$stmt = $db->prepare('SELECT * from ?');
$stmt->bindValue(1, $rable, ??);

では、動的なテーブル名を使用する代わりに実際に何ができるのでしょうか?

$stmt = $db->prepare('SELECT * from '.$table);

これは脆弱です。escape_string方法はありPDOますか?説明書を一通り読んだのですが、わからなかったようです。私が見つけたのはquote、テーブルと列では機能しませんでした。この機能を安全に実装する方法はありますmysqliか?

4

3 に答える 3

0

ティックを使用する場合は、ユーザー入力でティックを置き換えるだけで問題ありません。

$column = 'foo';
$table = 'bar';

$query = 'SELECT ' . $column . ' FROM ' . $table; // Insecure!

$query = 'SELECT `' . str_replace('`', '', $column) . '` FROM `' . str_replace('`', '', $table) . '`'; // Not insecure
于 2013-12-07T18:18:52.700 に答える