2013-02-12 209 views
0

我新的PHP和MySQL,我下面的問題所困擾:MySQL和PHP意外錯誤

$sql = "UPDATE Pharm_Log set text = ". $bloodtest . " WHERE patient = " . $patientid .; 
    if(is_resource($sql) and mysql_num_rows($sql)>0){ 

,當我試圖關閉我的SQL語句出現問題。我知道這是與托架和分號相關的事情,但每當我改變一件事情時,就會弄亂另一件事情。有人可以幫我嗎?

+1

我覺得這只是最後的點在分號之前,嘗試刪除那個 – bhttoan 2013-02-12 12:08:13

+1

另外,'$ sql'是一個字符串,而不是資源。您需要首先執行查詢以獲取資源。而'mysql_num_rows()'不適用於UPDATE查詢。 – Arjan 2013-02-12 12:11:05

+0

所有'mysql_ *'函數都被棄用。改爲使用'mysqli'或'PDO'功能。 – Arjan 2013-02-12 12:14:13

回答

1

這裏的事情,你需要做的:

  • 刪除分號
  • 前的最後階段包裹字符串字面單引號
  • 執行使用mysql_query
查詢

code:

$sql = "UPDATE Pharm_Log set text = '$bloodtest' WHERE patient = " . $patientid; 
$result = mysql_query($sql); 
if(is_resource($result) and mysql_num_rows($result)>0) { ... } 

作爲旁註,如果變量的值(s)來自外部,則該查詢容易受到SQL Injection的影響。請看下面的文章,瞭解如何防止它。通過使用PreparedStatements你可以擺脫使用單引號圍繞值。

1

分號之前刪除的點。

0

最後您不需要.。改成它,

$sql = "UPDATE Pharm_Log set text = ". $bloodtest . " WHERE patient = " . $patientid; 
+0

非常感謝您的幫助! – user2064630 2013-02-12 12:25:41

1

是的,它的最後.這是造成語法錯誤。另外你需要在引號中包含非整型值,另外它的重要之處在於你不會忘記添加mysql_real_escape_string,否則會出現問題,你還應該使用PDO或者mysqli和準備好的查詢。

<?php 
$sql = "UPDATE Pharm_Log 
     SET `text`='".mysql_real_escape_string($bloodtest)."' 
     WHERE patient = '".mysql_real_escape_string($patientid)."'"; 
?> 
1

Firsdt,刪除第一行的最後一個點,因爲您沒有在末尾連接任何字符串。應該看起來像這樣:

$sql = "UPDATE Pharm_Log set text = ". $bloodtest . " WHERE patient = " . $patientid; 

你正在查詢SQL服務器嗎?如果不是,變量$sql沒有做任何事情,所以加:

$result = mysql_query($sql); 

,改變你的最後一行代碼來處理查詢的結果,而不是

if(is_resource($result) && mysql_num_rows($result) > 0)