2013-01-06 86 views
0

可能重複不工作時:
How to include a PHP variable inside a MySQL insert statement

我想通過它的名稱來選擇一個WordPress類別的類別ID。奇怪的是,如果我手動定義類別,這一切都完美。

echo命令給我的類別名稱並在最後我得到的變量$ CATID類別ID。

但是,如果我通過表單發送它,echo命令會給出與手動定義完全相同的類別名稱,但MySQL命令不起作用,這意味着$ catid變量保持爲空。

在這裏所做的任何人有一個想法,我只是無法避開時,爲什麼完全一樣的串發佈通過表單直接,但沒有定義它工作時我的頭。下面的代碼示例是我的代碼的一部分,通過表單傳遞$ category Variable。如果我要取消註釋手動變量並評論帖子變量,它將全部工作。

// $category = "Manual"; // manually defined 

$category = $_POST['category']; //defined through a form 

echo $category; 

$connect = mysql_connect(localhost,abc,def); 

if (!$connect) { 
    die('Could not connect: '.mysql_error()); 
} 

mysql_select_db("abc"); 
$queryresult = mysql_query("SELECT * FROM `wp_terms` WHERE `name`='$category' LIMIT 0,1"); 

while($row = mysql_fetch_array($queryresult)) { 
    $catid = $row[term_id]; 
} 
+1

當心SQL注入...... –

+0

您可以隨時檢查'mysql_error()'如果事情不工作。 – mario

+0

另請注意,['mysql_ *'](http://php.net/manual/en/function.mysql-query。PHP)功能正在被棄用。你不應該將它們用於新項目。改爲使用[Mysqli](http://php.net/manual/en/book.mysqli.php)或[PDO](http://php.net/manual/en/class.pdo.php)。 – Arjan

回答

0

這是一個好主意,以確認您的文章數據的內容,這樣的事情:

print_r($_POST); die; 

這將讓你看到,如果你的變量,甚至存在於提交,我打賭要麼你沒有通過它,要麼通過另一個名字來傳遞(也許甚至是一個錯字)。

這是很難回答沒有形式和處理代碼這個問題,但你可以在-至少去錯誤的數據,通過可變內容轉儲到屏幕。

希望這會有所幫助。

PS:這是浪費資源:

echo "$category"; 

您可以使用此:

echo $category; 

PPS:最佳的清洗工具變量來防止SQL注入,這個代碼是很危險的:

$category = $_POST['category']; 
mysql_query("SELECT * FROM `wp_terms` WHERE `name`='$category' LIMIT 0 , 1"); 

如果你的變量是從PPOST傳遞正確,儘量去竊聽你的SQL查詢,像這樣:

$query = sprintf("SELECT * FROM wp_terms WHERE name='%s' LIMIT 0,1", $category); 
print_r($query); die; 

然後,如果你有一些界面爲你的數據庫的運行,試圖通過它扔查詢並檢查錯誤和結果(只是爲了確認您檢索語句)。

如果能正常工作,那麼你知道它的東西與你的SQL語句連接肯定,你會需要找到自己的PHP版本,倒空值$連接。您是在共享主機環境還是您自己的私人服務器上運行此代碼?

+0

感謝您的建議!當我使用print_r時,我可以看到帖子仍然正常工作! –

+0

任何其他想法,@丹貝爾? 奇怪的是,我沒有從mysql獲取錯誤,該變量可用於echo命令,但不適用於mysql。 –

+0

請參閱上文以獲取進一步的拆線提示。 –