我有一个用php制作的应用程序,我的数据库是mysql。 多年来应用程序工作正常,但几天前我更新了我的XAMPP版本,它更新了我的PHP版本,现在我有5.4。 现在的问题是查询数据库。该应用程序适用于医院,例如,我有许多姓氏包含单引号的患者。例如:Claudio O'Connor。 当我对此表执行更新时,某些患者名称中包含双引号,显然应用程序失败。 例如:
UPDATE patients SET lastname = 'O'Connor' WHERE idPatient = 92565
我认为这个问题与魔术引号的弃用有关。 问题是应用程序是巨大的,我无法通过逐个查看所有查询来解决这个问题。 有什么办法可以解决这个问题吗? 非常感谢你。
答案 0 :(得分:1)
在PHP 5.4中,自动魔术引号功能已从PHP中删除。如果您运行的是早于5.4的版本,则可以在php.ini中设置magic_quotes_gpc = On
(或使用以下内容):
ini_set('magic_quotes_gpc', '1');
如果您使用的是5.4+,则需要手动将mysql_real_escape_string
应用于所有数据。请注意,对于SQL注入防护,您不应该依赖魔术引号,而应使用手动代码来转义字符串。
答案 1 :(得分:0)
手动激活magic_quotes_gpc
或使用mysql_real_string_escape
清理输入是快速修复,可以正常工作,但您应该考虑使用没有任何SQL注入问题的PDO预处理语句。< / p>
以下是
的示例<?php
$insert = $dbh->prepare("INSERT INTO fruit(name, colour) VALUES (?, ?)");
$insert->execute(array('apple', 'green'));
$insert->execute(array('pear', 'yellow'));
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
/* Group values by the first column */
var_dump($sth->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP));
?>