2014-11-04 56 views
2
$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

回答

2

使用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

1

試試這個:

UPDATE client SET pname = 'D\'Cunha' WHERE url = 'example.com' 
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?

+1

感謝Mark ...我是一名初學者,一定會閱讀有關準備好的陳述 – 2014-11-04 04:09:46