更新php到5.4后,在MySql查询中引用错误

时间:2014-07-30 14:50:59

标签: php xampp quotes

我有一个用php制作的应用程序,我的数据库是mysql。 多年来应用程序工作正常,但几天前我更新了我的XAMPP版本,它更新了我的PHP版本,现在我有5.4。 现在的问题是查询数据库。该应用程序适用于医院,例如,我有许多姓氏包含单引号的患者。例如:Claudio O'Connor。 当我对此表执行更新时,某些患者名称中包含双引号,显然应用程序失败。 例如:

UPDATE patients SET lastname = 'O'Connor' WHERE idPatient = 92565

我认为这个问题与魔术引号的弃用有关。 问题是应用程序是巨大的,我无法通过逐个查看所有查询来解决这个问题。 有什么办法可以解决这个问题吗? 非常感谢你。

2 个答案:

答案 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));
?>