0

我正在构建一个搜索引擎,并且一直在尝试在 PHP 中构建参数化 SQL 语句。我想知道在哪里可以使用参数的规则是什么。

例如这有效:

$var = $unsafevar;
$stmt = mysqli_prepare($connection, "SELECT * FROM users WHERE username = ?");
mysqli_stmt_bind_param($stmt, 's', $var);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
$row = mysqli_fetch_assoc($result);

这不会:

$var = 'SELECT';
$var2 = 11;
$stmt = mysqli_prepare($connection, "? * FROM users WHERE username = ?");
mysqli_stmt_bind_param($stmt, 'ss', $var, $var2);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
$row = mysqli_fetch_assoc($result);

参数在哪里可以用,哪里不能用?

或者,更简单地说,参数化对变量有什么作用?它是否在它们周围加上单引号?如果是这种情况,有没有办法将通配符、列名或 SQL 子句本身参数化?

4

2 回答 2

3

数据库、模式、表和列名无法参数化 -如果您希望“参数化”它们,则需要使用动态 SQL 。

链接的文章是对动态 SQL 使用的广泛讨论,虽然适用于大多数 SQL 数据库,但主要处理 SQL Server。

于 2013-09-15T08:05:46.083 回答
2

我的参数助记符是这样的:

在任何可以使用单个标量值的地方,都可以使用参数。

即,带引号的字符串文字、带引号的日期文字或数字文字。

其他任何东西(标识符、SQL 关键字、表达式、子查询、谓词的值列表IN()等)都不能参数化。

于 2013-09-15T08:42:11.723 回答