Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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 pdo execute()限制为仅运行第一条sql语句_Php_Sql_Pdo - Fatal编程技术网

将php pdo execute()限制为仅运行第一条sql语句

将php pdo execute()限制为仅运行第一条sql语句,php,sql,pdo,Php,Sql,Pdo,有没有办法限制php pdo execute()只运行第一条sql语句 比如说跑步 从客户中选择*;投递表发票 将返回所有客户,但也将删除发票表 我有一种情况,我需要一个用户的完整SQL语句,但它必须是SELECT语句,而不是其他语句 我的例子只是许多可能被恶意输入的例子之一。它可能包括附加的DROP、UPDATE、DELETE语句等 准备好的语句将简单地用值替换?s。它不会阻止危险的SQL语句被传递给它 如果有一种方法可以限制php pdo execute()只运行第一条sql语句,那么这不会

有没有办法限制php pdo execute()只运行第一条sql语句

比如说跑步

从客户中选择*;投递表发票

将返回所有客户,但也将删除发票表

我有一种情况,我需要一个用户的完整SQL语句,但它必须是SELECT语句,而不是其他语句

我的例子只是许多可能被恶意输入的例子之一。它可能包括附加的DROP、UPDATE、DELETE语句等

准备好的语句将简单地用值替换?s。它不会阻止危险的SQL语句被传递给它


如果有一种方法可以限制php pdo execute()只运行第一条sql语句,那么这不会是一个问题。

如果您试图阻止sql注入,prepare语句可以处理它

您可以使用类似的方法来防止SQL注入

$stmt = $db->prepare("SELECT * FROM table WHERE id=? AND name=?");
$stmt->bindValue(1, $id, PDO::PARAM_INT);
$stmt->bindValue(2, $name, PDO::PARAM_STR);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 

如果你不需要的话,为什么要把那份声明放在那里?如果您担心注入,那么PDO中准备好的语句将自行处理,如果您特别想删除查询中包含的drop查询,并且如果您在某个变量中有该查询,那么
preg_replace(“/(?)drop(.*)/”,“$1”,“SELECT*FROM customer;drop TABLE invoice”)
将删除该目录中存在的drop查询query@user790454-如果选择子字符串或插入包含单词drop的子字符串,则可能会失败。是的,然后我们可以将drop替换为;我来告诉你原因。想象你要造一辆汽车。然后问“如何为汽车制造方轮”?每个人都会向你指出一个问题,即在哪里解释了圆形车轮的构造。编程的问题是每个人都把它当作野餐。一切都可以做,任何人都可以创造一切。没有规则,没有知识,没有限制。只是需要自由的想象力。事实上,汽车不会用方轮行驶。事实上,你不应该从用户那里收到任何原始SQL,除非你明确且肯定地知道你在做什么。谢谢你的回答,但我实际上并没有用值替换?s。在这种情况下,我需要接受来自用户的sql字符串,而不仅仅是值,它必须是SELECT语句,否则可能会损坏系统。在这种情况下,您需要关键字黑名单,或者只需更改DB prevellage,以便无法删除表;