由于撇号符号,mysql查询没有得到更新

问题描述:

$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中的值进入客户端表。如果名称中有撇号('),则会引发错误。我可以在变量中进行哪些更改以将名称发送到数据库表?由于撇号符号,mysql查询没有得到更新

示例: Jerry没有问题更新 D'Cunha没有得到更新,因为它有撇号。查询变得

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

我发现了一些文章,但不说有关如何查找撇号签和改变变量值

+1

'stripslashes()函数'和'mysql_real_escape_string()'会解决这个问题。 – 2014-11-04 03:55:48

+0

请勿使用'mysql_ *'。使用预准备的语句 – 2014-11-04 03:56:06

+0

这可以解决,如果我想运行一个查询。我正在循环数百个数据。如何用if语句更改变量$ pname的值?如果有撇号符号,请将其替换为您所建议的格式... – 2014-11-04 03:57:02

使用mysql_escape_string()

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

and learn mysqli or PDO作为mysql正在退化并且很快将要下降

+0

非常感谢。有效 ! – 2014-11-04 04:06:01

+0

这肯定会工作,但应该指出,PHP专门[警告此](http://php.net/manual/en/function.mysql-escape-string.php):***警告** 这函数从PHP 5.3.0开始已被DEPRECATED。依靠这个功能是非常沮丧的。* – 2014-11-04 04:10:34

+0

啊,另一个美好的结局;) – 2014-11-04 04:48:30

试试这个:

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

使用准备好的语句。 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?

+1

感谢Mark ...我是一名初学者,一定会阅读有关准备好的陈述 – 2014-11-04 04:09:46