2011-04-07 66 views
0

這可能是一個非常微不足道的問題,但我一直在努力嘗試一段時間,也嘗試在網上找到答案,仍然出現錯誤。更新SQL查詢 - 將值設置爲PHP字符串變量

想寫一個簡單的更新查詢一個PHP/MySQL的形式:

$sql="UPDATE mytable SET numericValue = '".$someid."', description = '".$sometext."' WHERE id='".$myid."' "; 

雖然正在傳遞和更新,精細所有數值,我不能得到正確的描述。描述列是VARCHAR,$ sometext是一個字符串,我無法正確使用引號將其轉義/包裝。

回答

1

您應該使用sprintf,它通過提供佔位符(%d爲小數,%s爲字符串)來避免字符串混淆。有關更多信息,請參閱manual

$sql= sprintf("UPDATE mytable SET numericValue = %d, description = '%s' WHERE id = %d", $someid, $sometext, $myid); 

如果$ someText從GET/POST來/ ..你應該換一個mysql_real_escape_string()周圍,以防止SQL注入(或使用PDO預處理語句)。

+1

如果sprintf()是一個複雜的查詢,需要插入很多值,那麼它是一個醜陋的方法。太容易誤置參數。在建立字符串之前更好地按摩這些值,然後「傳統地」構建它,或者更好的是,使用PDO。 – 2011-04-07 21:09:10

+0

我曾嘗試sprintf方法,但仍不成功。記錄正在更新,但只有數值發生變化 - 沒有sql錯誤,但VARCHAR沒有更新 – dkatwitt 2011-04-07 21:28:21

+0

愚蠢的我。拼錯一個變量。工作魔術!非常感謝。 – dkatwitt 2011-04-07 21:45:47

0
$sql="UPDATE mytable SET numericValue = '$someid' , description = '$sometext' WHERE id='$myid' "; 

我認爲你不必擔心sql注入。