【问题标题】:mysql query does not get updated due to apostrophe sign由于撇号,mysql 查询没有得到更新
【发布时间】:2014-12-30 21:21:04
【问题描述】:
$url = "example.com";
$data = json_decode($raw);
    $pname=$data->name;
$sql="UPDATE `client` SET pname='$pname' WHERE url='$url'";
    $query=mysql_query($sql,$link)or die(mysql_error());

当 json 数据被解码时,变量 $pname 中的值进入客户端表。如果名称中有撇号 ('),则会引发错误。我可以对变量进行哪些更改以将名称发送到数据库表?

示例: 杰瑞更新没有问题 D'Cunha 没有更新,因为它有撇号。查询变成了

"UPDATE `client` SET pname='D'Cunha' WHERE url='example.com'"

我找到了一些文章,但没有说明如何找到撇号并更改变量值

【问题讨论】:

  • stripslashes()mysql_real_escape_string() 会解决这个问题。
  • 不要使用mysql_*。使用准备好的语句。
  • 如果我想运行单个查询,这可以解决。我正在循环数百个数据。如何使用 if 语句更改变量 $pname 的值?如果有撇号,请将其替换为您建议的格式...
  • 然后在查询本身中注入mysql_real_escape_string(),或者使用准备好的语句,如前所述。
  • 谢谢大家。上帝保佑

标签: php mysql sql oracle


【解决方案1】:

使用mysql_escape_string()

$sql="UPDATE `client` SET pname='".mysql_escape_string($pname)."' WHERE url='$url'";

并了解mysqliPDO,因为mysql 已被淘汰,很快就会被丢弃

【讨论】:

  • 这肯定会起作用,但应该注意的是 PHP 特别是 warns against this: 警告 自 PHP 5.3.0 起,此函数已被弃用.强烈建议不要依赖此功能。
  • 啊,又是一个幸福的结局;)
【解决方案2】:

使用准备好的语句。 MysqliPDO。以下是 mysqli 的示例:

$url = "example.com";
$data = json_decode($raw);
$pname=$data->name;

$mysqli = new mysqli($host, $user, $password, $db);

$stmt = $mysqli->prepare("UPDATE client SET pname = ? WHERE url = ?");
$stmt->bind_param("ss", $pname, $url);
$stmt->execute();

Why shouldn't I use mysql_* functions in PHP?

【讨论】:

  • 谢谢马克...我是初学者,一定会阅读准备好的陈述
【解决方案3】:

试试这个:

UPDATE client SET pname = 'D\'Cunha' WHERE url = 'example.com'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    相关资源
    最近更新 更多