2011-05-18 128 views
0

我寫了一個PHP類,它將更新表中某一行的4個字段。該行由會話變量'user'決定(這是唯一的)。它不工作,但我不確定是因爲查詢還是類本身。所以我第一次會問你們,如果在這個查詢中有任何錯誤(有可能是),當查詢是正確的,我會看看類本身是否也有錯誤。PHP更新查詢

查詢:

UPDATE tblRegistratie(lengte, gewicht, bmi geluk) WHERE `gebruikersnaam` = '" . $_SESSION['regain-user'] . "' 
     VALUES(
     '".mysqli_real_escape_string($conn, $this->Lengte_update)."', 
     '".mysqli_real_escape_string($conn, $this->Gewicht_update)."', 
     '".mysqli_real_escape_string($conn, $this->BMI_update)."', 
     ''".mysqli_real_escape_string($conn, $this->Geluk_update)."', 
     ); 
+0

一些基於如何SO語法熒光筆在未關閉的報價窒息,你可以從你的代碼張貼在正確的上下文中的查詢? – 2011-05-18 17:16:25

+3

另外,調用失敗後,mysql_error()會說什麼? – 2011-05-18 17:16:46

+0

'bmi geluk' - 如果這是一列,則需要用反引號將其轉義(空格可能會破壞查詢) – Piskvor 2011-05-18 17:18:50

回答

0

UPDATE在MySQL正確的語法會像::

$sql = "UPDATE tblRegistratie SET 
    lengte = '".mysqli_real_escape_string($conn, $this->Lengte_update)."', 
    gewicht = '".mysql_real_escape_string($conn, $this->Gewicht_update)."', 
    bmi = '".mysql_real_escape_string($conn, $this->BMI_update)."', 
    geluk = '".mysqli_real_escape_string($conn, $this->Geluk_update)."' 
    WHERE gebruikersnaam = '". $_SESSION['regain-user']; 
1

最後一行:

''".mysqli_real_escape_string($conn, $this->Geluk_update)."', 
    ^^//fix the double qoute and make it single ' 
+0

啊,是的,看起來像兩個問題。 – 2011-05-18 17:19:28

+0

@邁克爾,是的是的 – Neal 2011-05-18 17:20:03

2

的報價看起來很有趣在這裏,但我覺得你的問題是一個尾隨逗號,最後PARAM後:

''".mysqli_real_escape_string($conn, $this->Geluk_update)."', 
                  ^^^^^ 
1

這是UPDATE查詢的樣子。

UPDATE tblRegistratie 
SET lengte=mysqli_real_escape_string($conn, $this->Lengte_update), 
    gewicht=mysql...etc 
    `bmi geluk`=...etc 
WHERE `gebruikersnaam` = '" . $_SESSION['regain-user'] . "' 

你看起來不像這樣。

+0

菲利普斯確實 - 我完全錯過了。 – 2011-05-18 17:24:12

0

您需要在您設置的值後面有where子句。此外,這聽起來像你有一些標點問題。

考慮一般更容易閱讀的善良以下改寫:

$query = 'UPDATE tblRegistratie 
    SET `lengte` = "' . mysqli_real_escape_string($conn, $this->Lengte_update) . '", 
     `gewicht` = "' . mysqli_real_escape_string($conn, $this->Gewicht_update) . '", 
     `bmi` = "' . mysqli_real_escape_string($conn, $this->BMI_update) . '", 
     `geluk` = "' . mysqli_real_escape_string($conn, $this->Geluk_update) . '" 
    WHERE `gebruikersnaam` = "' . $_SESSION['regain-user'] . '" 
'; 

此外,像sprintf函數,()可以成爲你的朋友。 :)

$query = sprintf('UPDATE `tblRegistratie` 
    SET `lengte` = "%s", 
     `gewicht` = "%s", 
     `bmi` = "%s", 
     `geluk` = "%s" 
    WHERE `gebruikersnaam` = "%s";', 
    mysqli_real_escape_string($conn, $this->Lengte_update), 
    mysqli_real_escape_string($conn, $this->Gewicht_update), 
    mysqli_real_escape_string($conn, $this->BMI_update), 
    mysqli_real_escape_string($conn, $this->Geluk_update), 
    $_SESSION['regain-user'] 
); 
+0

-1您忘記了SQL中的字符串引號。 – 2011-05-18 17:23:26

+0

你說得對,我做到了。謝謝 - 更正。在一個文本框裏面寫這件事很難;我應該使用真正的文本編輯器。:) – 2011-05-18 17:26:58

+0

我編輯了查詢,現在它運行在SQL中。然而,班級仍然不起作用,因此這意味着它也存在問題。它也沒有給出任何錯誤,這有點困擾我。我會發佈一個關於它的新問題。謝謝您的幫助! – 2011-05-18 18:55:09

0

PHP

在最後一行有兩個最初的單引號。

修復:

''".mysqli_real_escape_string($conn, $this->Geluk_update)."', 

成爲

'".mysqli_real_escape_string($conn, $this->Geluk_update)."', 

MySQL的

此外,您UPDATE語法似乎是完全無效的。請通讀the documentation