由于撇号,mysql查询不会更新

时间:2014-11-04 03:53:43

标签: php mysql sql oracle

$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'"

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

3 个答案:

答案 0 :(得分:2)

使用mysql_escape_string()

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

并了解mysqliPDO,因为mysql已被弃用,儿子将会放弃

答案 1 :(得分: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?

答案 2 :(得分:1)

试试这个:

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