2011-06-22 103 views
1

我有以下查詢:PHP PDO致命錯誤

$sql = "UPDATE db.users SET $str WHERE users.{$this->row} = {$this->value} LIMIT 1"; 

呼應的出:

UPDATE db.users SET username=testUser, gid=3 WHERE users.username = mmiller LIMIT 1 

然而,當我這樣做:

$count = Db::init()->exec($sql); 

我得到:

Fatal error: Uncaught exception 'PDOException' with message 

'SQLSTATE [42S22]:柱未找到: 1054未知列 'mmiller' 在 '其中在 /class.php:185 堆棧跟蹤子句'':#0 /class.php(185) ('username','gid', 'testUser','3')# PDO-> exec('UPDATE db ...')#1 /class.php(194):# {2}主扔在 /class.php 上線185

任何想法?

回答

5

您需要使用"

UPDATE db.users SET username="testUser", gid="3" WHERE users.username = "mmiller" LIMIT 1 

確保您的迴音向您顯示。你可以使用' ofcourse,不管你的船浮筒:)

+0

這將返回可能是「testuser的」這一次同樣的錯誤 – grep

+1

?我會解決,太多:P – Nanne

+0

您必須添加'''周圍的'{$這個 - >值}',但也有一個錯誤的分配withing是'$ set'變量。另外:你說你不需要準備。語句,但你不會,如果你沒有,你需要使用它們.... – Nanne

2

您需要使用字符串值的報價;

$sql = "UPDATE db.users SET $str WHERE users.{$this->row} = '{$this->value}' LIMIT 1"; 

看到您已經在使用PDO,使用預準備語句可能會有所幫助。雖然對於一次性查詢有點慢,但它增加了安全性並處理了所有需要的轉義,所以您不會遇到這些問題。

+0

世界上沒有用戶輸入,所以我不是爲準備語句有這個問題。但是把這個引號僅返回相同的錯誤 – grep

+0

@Headspin不知何故,你的數據庫認爲「mmiller」是一列,而不是價值。這通常歸結爲忘記了字符串值的引號。如果你把它放在引號中,你的數據庫就不會認爲你指的是一列。 –

+0

你知道嗎,揭掉權,它只是在需要它周圍的引號$ STR字符串值中的一個。正確的更完整的答案。謝謝 – grep