我只是想知道是否有一种方法可以在MySQL中使用某种形式的预处理语句,这样就不必逃避所有输入,也不必将所有文件从MySQL切换到MySQLi。我真的不相信转义功能,因此,如果在常规MySQL中有任何可行的替代方法,那就太好了。
使用PDO(PHP数据对象)连接到MySQL数据库。此方法将确保所有数据库输入将始终被视为文本字符串,并且您将不必进行任何手动转义。
结合正确使用html_entities()来显示数据库中的数据 ,
这是保护您的页面免于注入的一种可靠的好方法。我总是使用PDO处理项目中的所有数据库连接。
创建数据库对象(在这种情况下,实施某种字符编码):
try {
$db = new PDO("mysql:host=[hostname];dbname=[database]",'[username]','[password]');
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES utf8");
$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$db->exec('SET NAMES utf8');
} catch (PDOException $e) {
echo $e->getMessage();
}
然后像这样使用它:
$id = 1;
$q = $db->prepare('SELECT * FROM Table WHERE id = ?');
$q->execute(array($id));
$row = $q->fetch();
echo $row['Column_1'];
要么
$q = $db->prepare('UPDATE Table SET Column_1 = ?, Column_2 = ? WHERE id = ?');
$q->execute(array('Value for Column_1','Value for Column_2',$id));
和通配符:
$search = 'John';
$q = $db->prepare('SELECT * FROM Table WHERE Column_1 LIKE ?');
$q->execute(array('%'.$search.'%'));
$num = $q->rowCount();
if ($num > 0) {
while ($row = $q->fetch()) {
echo $row['Column_1'];
}
} else {
echo "No hits!";
}
阅读更多:
如何防止PHP中进行SQL注入?
什么时候不使用准备好的语句?
PDO准备好的陈述有多安全
http://php.net/manual/zh/book.pdo.php
问题内容: 我之前在一个PHP项目中工作过,其中准备好的语句使SELECT查询的速度提高了20%。 我想知道它是否适用于Python?我似乎找不到任何明确表明可以或不能做到的事情。 问题答案: 直接回答,不,不是。 joshperry的答案很好地解释了它的作用。 从eugene y答案到类似问题, 检查MySQLdb 包注释: 在MySQLdb中,通过转义字符串然后将其盲目插入到查询中来进行“参数
问题内容: 我在程序中尝试了准备好的语句,但是没有用。 注释的部分是“准备报表”部分。当我将其更改为常规语句时,一切都正确。 有人可以告诉我我想念什么吗? 非常感谢。 问题答案: 尝试从查询中删除并在添加参数后使用:
我正在使用我生成的一个准备好的语句,但在Java抛出的语句上出现了语法错误。然而,当我将PS的toString复制并粘贴到数据库的phpmyadmin中时,它的执行完美无缺。有什么想法会出错吗,我很难理解? 编辑:更改为PS.ExecuteUpdate(查询);还是不起作用。
问题内容: 我正在尝试将SQL与Python中准备好的语句一起使用。Python对此没有自己的机制,因此我尝试直接使用SQL: 然后,在循环中: 在循环中,我得到: 这是怎么回事? 问题答案: 例如,在http://zetcode.com/db/mysqlpython/上解释了如何在Python中使用MySQL准备好的语句- 在该页面中查找。 在您的情况下,例如: 然后,将其放入循环中: 无需进一
问题内容: 我正在使用Go(1.6.x)sql包以及PostGres(9.4)构建API。我准备好的陈述应具有适用范围或要求范围吗?阅读文档后,将它们放在应用程序范围内似乎可以更有效地减少准备阶段的数量。但是,也许还有其他考虑因素,而准备好的陈述并不是为了活那么久? 问题答案: 准备好的语句使您可以执行重复的SQL命令,这些命令可能仅在参数值方面有所不同。 它们并不意味着“长寿”,因为一条准备好的
主要内容:预处理语句及绑定参数,MySQLi 预处理语句,实例 (MySQLi 使用预处理语句),PDO 中的预处理语句,实例 (PDO 使用预处理语句)预处理语句对于防止 MySQL 注入是非常有用的。 预处理语句及绑定参数 预处理语句用于执行多个相同的 SQL 语句,并且执行效率更高。 预处理语句的工作原理如下: 预处理:创建 SQL 语句模板并发送到数据库。预留的值使用参数 "?" 标记 。例如: 数据库解析,编译,对SQL语句模板执行查询优化,并存储结果不输出。 执行:最后,将应用绑定的