2013-08-29 44 views
-2

我有mysqli的命令,它提供錯誤消息未知列在 'rates_test' 'where子句'

未知列 'rates_test' 在 'where子句'

$result1 = mysqli_query($con,"UPDATE Custom_Rates SET UserID=$id WHERE TableName =" . $assigntable); 

$id下面是另一個查詢返回的數字

$assigntable是一個字符串傳遞給上述查詢所在的函數,但基本上是

$assigntable = array_search('Assign', $_POST); 

所以會有價值rates_test

我不知道是什麼是錯的查詢語法,什麼是更奇怪,如果我將其更改爲

$result1 = mysqli_query($con,"UPDATE Custom_Rates SET UserID=$id WHERE TableName ='$assigntable'"); 

哪是我試過的東西之一,我得到

「字段列表」中的未知列'Array'

$string = "UPDATE Custom_Rates SET UserID=$id WHERE TableName =".$assigntable; 

輸出

UPDATE Custom_Rates SET用戶ID =陣列,其中表名= rates_test

$string = "UPDATE Custom_Rates SET UserID=$id WHERE TableName ='" . $assigntable . "'"; 

輸出

UPDATE Custom_Rates SET用戶ID =陣列,其中表名= 「利率_test」

+0

將查詢放入字符串中。然後在變量替換之後打印出字符串。 99%的時間,當你正確調試它時,問題很明顯。 –

+0

僅僅因爲你已經將'mysql_'改爲'mysqli_',它不能解決安全問題。你仍然在SQL中注入變量意味着你很容易受到攻擊。 – h2ooooooo

+0

向我們展示$ id是如何形成的。 – Mihai

回答

0

這是非常明顯的,從你的輸出

UPDATE Custom_Rates SET用戶名=數組,其中表名= 'rates_test'

$id另一個查詢返回一個數字。

所以你的問題。使用var_dump($id)print_r($id)來確定實數的位置,然後參考它(例如,$id["number"])。

+0

是的,我現在看到,Id不是我想的和修復它謝謝 –

+0

@ ZacPowell我懷疑你*真的*修復 –

+0

@YourCommonSense解釋? –

-2

如果你確信你在$assigntable變量有rates_test,然後更改:

$result1 = mysqli_query($con,"UPDATE Custom_Rates SET UserID=$id WHERE TableName =" . $assigntable); 

要:

$result1 = mysqli_query($con,"UPDATE Custom_Rates SET UserID=$id WHERE TableName ='" . $assigntable . "'"); 
-1

你應該使用的東西,以防止SQL注入。你的第二次嘗試會奏效,但看起來$ id的價值不是你認爲的!

嘗試呼應了查詢這樣的:

echo "UPDATE Custom_Rates SET UserID=$id WHERE TableName ='$assigntable'" 

,看看你會得到什麼。

+0

Yup看起來像$ id是事實'Array'不是一個數字,是的我知道我需要防止sql注入,但想要得到這個工作第一 –

+0

所以正確的是什麼是給$ id分配一個值,你會讓它工作。我建議轉向準備好的陳述。它會讓你的生活更輕鬆並防止注射。 –

0

你的情況是一個明確的eample爲什麼你應該使用預準備語句

,而不是隨便找你的價值觀直接進入查詢。

$stmt = mysqli_prepare($con,"UPDATE Custom_Rates SET UserID=? WHERE TableName=?"); 
$stmt->bindParam("ss",$id, $assigntable); 
$stmt->execute(); 

它必須是。

相關問題