So fügen Sie PHP-Variablen in MySQL-Anweisungen ein
P粉738248522
2023-08-23 21:12:18
<p>Ich versuche, Werte in ein Inhaltsverzeichnis einzufügen. Wenn ich in VALUES keine PHP-Variablen habe, funktioniert es einwandfrei. Dies funktioniert nicht, wenn ich die Variable <code>$type</code> in <code>VALUES</code> einfüge. Was habe ich falsch gemacht? </p>
<pre class="brush:php;toolbar:false;">$type = 'testing';
mysql_query("INSERT INTO-Inhalte (Typ, Reporter, Beschreibung)
VALUES($type, 'john', 'whatever')");</pre>
<p><br /></p>
为避免 SQL 注入,插入语句带有 be
在任何 MySQL 语句中添加 PHP 变量的规则都是简单明了的:
1。使用准备好的语句
此规则涵盖 99% 的查询,特别是您的查询。任何表示SQL 数据文字的变量(或者,简单地说 - SQL 字符串或数字)都必须通过准备好的语句添加。 没有例外。
此方法涉及四个基本步骤
以下是如何使用所有流行的 PHP 数据库驱动程序执行此操作:
使用
mysqli
添加数据文字当前的 PHP 版本允许您在一次调用中完成准备/绑定/执行:
如果您的 PHP 版本较旧,则必须显式完成准备/绑定/执行:
代码有点复杂,但是所有这些运算符的详细解释可以在我的文章中找到,如何使用 Mysqli 运行 INSERT 查询,以及显着简化该过程的解决方案。
对于 SELECT 查询,您可以使用与上面相同的方法:
但是,如果您的 PHP 版本较旧,您将需要执行准备/绑定/执行例程,并添加对
get_result()
方法的调用,以获得熟悉的mysqli_result 您可以通过通常的方式从中获取数据:使用 PDO 添加数据文字
在PDO中,我们可以将bind和execute部分结合起来,非常方便。 PDO 还支持命名占位符,有些人觉得这非常方便。
2。使用白名单过滤
任何其他查询部分,例如 SQL 关键字、表或字段名称或运算符 - 必须通过白名单进行过滤。
有时我们必须添加一个代表查询另一部分的变量,例如关键字或标识符(数据库、表或字段名称)。这种情况很少见,但最好做好准备。
在这种情况下,必须对照脚本中显式写入的值列表检查您的变量。我的另一篇文章根据用户的选择在 ORDER BY 子句中添加字段名称对此进行了解释:
这是一个例子:
在这样的代码之后,
$direction
和$orderby
变量都可以安全地放入 SQL 查询中,因为它们要么等于允许的变体之一,要么将会抛出一个错误。关于标识符最后要提到的是,它们还必须根据特定的数据库语法进行格式化。对于 MySQL,它应该是标识符周围的
反引号
字符。因此,我们的订单示例的最终查询字符串将是