将php pdo execute()限制为仅运行第一条sql语句
有没有办法限制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语句,那么这不会
从客户中选择*;投递表发票
将返回所有客户,但也将删除发票表
我有一种情况,我需要一个用户的完整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,以便无法删除表;