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

将php更新为5.4后,在MySql查询中引用错误,php,xampp,quotes,Php,Xampp,Quotes,我有一份申请​​在php中,我的数据库是mysql。 多年来,这个应用程序一直工作正常,但几天前我更新了我的XAMPP版本,它也更新了我的PHP版本,现在我有了5.4。 现在的问题是查询数据库。该应用程序适用于一家医院,例如,我有许多患者的姓氏包含单引号。例如:克劳迪奥·奥康纳。 当我对这个表执行更新时,一些患者的名字中包含双引号,显然应用程序失败了。 例如: UPDATE patients SET lastname = 'O'Connor' WHERE idPatient = 92565 我

我有一份申请​​在php中,我的数据库是mysql。 多年来,这个应用程序一直工作正常,但几天前我更新了我的XAMPP版本,它也更新了我的PHP版本,现在我有了5.4。 现在的问题是查询数据库。该应用程序适用于一家医院,例如,我有许多患者的姓氏包含单引号。例如:克劳迪奥·奥康纳。 当我对这个表执行更新时,一些患者的名字中包含双引号,显然应用程序失败了。 例如:

UPDATE patients SET lastname = 'O'Connor' WHERE idPatient = 92565
我认为这个问题与对魔法格言的反对有关。 问题是应用程序非常庞大,我无法通过逐个查看所有查询来解决这个问题。 总的来说,有没有办法解决这个问题?
非常感谢。

在PHP5.4中,自动魔术引号功能已从PHP中删除。如果运行的版本早于5.4,则可以在php.ini中设置
magic\u quotes\u gpc=On
(或使用以下方法):


如果您使用的是5.4+,则需要手动将
mysql\u real\u escape\u string
应用于所有数据。请注意,对于SQL注入预防,你不应该依赖魔法引号,而是使用手动代码来逃避字符串。

手动激活<代码> MigICHOGEXGEPC或或用“代码> MySQLYRealString逃逸< /代码>对输入进行快速修复,这将很好,但你确实应该考虑使用没有SQL注入的PDO准备语句。问题

下面是一个它看起来像什么的例子

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


您使用的是
mysql\u real\u escape\u string
?不,我没有使用该函数。我知道我可以用这种方式修复它,但这需要在很多页面中使用它。我希望通过一些设置来解决这个问题。可能是在.ini文件或其他文件中。是否使用PDO或mysql_查询?升级软件时需要查看更改日志。它不只是为了表演。最好现在就检查一下,看看还有什么东西在等着咬你我正在使用mysql\u查询
<?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));
?>