Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 准备;硬编码;SQL请求_Php_Mysqli_Prepared Statement - Fatal编程技术网

Php 准备;硬编码;SQL请求

Php 准备;硬编码;SQL请求,php,mysqli,prepared-statement,Php,Mysqli,Prepared Statement,这可能是一个愚蠢的问题,但即使SQL没有从字段、POST或GET中获取任何变量,您是否仍应该使用准备好的SQL 例如: $sql = mysqli_query($con, "SELECT * FROM table WHERE foo = 'bar'"); 在我的书中,这是安全的,因为没有输入,我错了吗?变量来自哪里并不重要。这不是场比赛。这是关于一个变量的。只要在查询中使用至少一个变量,就必须准备占位符 否则,可以改用query()方法。准备完全静态的查询是没有用的,如OP中所示。注意:我实际

这可能是一个愚蠢的问题,但即使SQL没有从字段、POST或GET中获取任何变量,您是否仍应该使用准备好的SQL

例如:

$sql = mysqli_query($con, "SELECT * FROM table WHERE foo = 'bar'");

在我的书中,这是安全的,因为没有输入,我错了吗?

变量来自哪里并不重要。这不是场比赛。这是关于一个变量的。只要在查询中使用至少一个变量,就必须准备占位符


否则,可以改用query()方法。准备完全静态的查询是没有用的,如OP中所示。

注意:我实际上认为准备好的语句更容易编写,我提出这个问题的原因是因为我正在迁移一个站点,并不真的想重写每一个SQL代码。如果你手工编写SQL语句,如果你相信自己的逃跑能力,那么这是绝对安全的!拉贝尔是对的。如果你绝对确定这不可能导致麻烦,我看不出你有任何理由不这样做。谢谢!是的,每当有某种输入时,我计划使用预先准备好的语句。这应该是安全的,对吧?@rmirabelle错了。我读了你的《搭便车指南》,我会确保我的数据格式正确(Sarah O'Hara的例子确实澄清了这个问题)。然而,这不是只有在插入或更新数据库时才需要的吗?这里有一个新的例子,这段代码不安全吗<代码>$sql=mysqli_查询($con,“按foo DESC LIMIT 4从表顺序选择*);虽然($sql_row=mysqli_fetch_array($sql)){$sql2=mysqli_query($con,“从表2中选择*,其中foo2=””),$sql_row['foo'].“””);}来吧,你会说只有插入查询必须正确格式化吗?想用cource的Sarah?测试一下你的例子吗?输出必须经过格式化才能正确返回。我说的是安全性、针对修改查询的保护(通过使用准备好的语句而不是上面的示例)等等。你说你了解莎拉的案子。这是关于查询输入,而不是输出。为什么现在要谈论回显输出?我从来没有说过我理解它,我说过这个例子用未格式化的查询输入澄清了这个问题,它只是不是一个安全问题。我现在所做的是继续提问,试图完全理解它,因为示例再次显示了我们想要避免的内容。我上面问的是,如果我们假设表中的数据是格式化的(?),那么上面的代码不安全吗?