这意味着您不能直接使用不受信任的值,例如作为列名或表名 - 或作为 LIMIT 参数。
例如,这是安全的:
$query = "SELECT * FROM tbl WHERE col = ?";
虽然这些不是:
$query = 'SELECT * FROM tbl WHERE col = ? LIMIT ' . $_GET['limit'];
$query = 'SELECT * FROM tbl WHERE ' . $_GET['field'] . ' = ?';
$query = "SELECT * FROM tbl WHERE col = ? AND othercol = '" . $_GET['other'] . "'";
$query = 'SELECT * FROM ' . $_GET['table'] . ' WHERE col = ?';
基本上,准备好的语句的占位符用于在经典查询中在单引号内使用转义值的地方。
如果您想知道为什么数据库通常不支持表名之类的占位符:除了动态表/列名并不常见的事实外,数据库引擎通常会在准备好准备好的语句时对其进行优化。但是,如果不确切知道访问了哪些表/列,则无法正确完成此操作。