2013-11-21 229 views
-2

我已經看過了所有,無法遇到我的問題的解決方案,所以我在這裏。我試圖從表單中獲取用戶的名字。從這個名字我試圖讓用戶ID在另一個表中發佈。但是,當我這樣做時,表中的值爲「0」。PHP/MYSQL從名稱數據庫獲取user_id使用名稱

這是代碼:

$to_name = trim($_POST['to_name']); 

$get_to_id = "SELECT user_id FROM users WHERE name = " . $to_name; 
$gti = mysql_query($get_to_id); 
if($gti) { 
$abc = mysql_fetch_array($gti); 
$to_id = $abc['user_id']; 
} 

,當我將其插入到表中不顯示用戶ID。任何幫助都會很棒。提前致謝。

+3

首先...'$ to_name'應該在引號 –

+2

之後....清理您的輸入。 –

+0

您應該檢查所有MySQL操作的錯誤。 –

回答

1
$get_to_id = sprintf("SELECT user_id FROM users WHERE name = '%s' ",$to_name); 
+0

謝謝,那確實是竅門 – nikito2003

+0

。當你得到足夠票數時,投票給我答案! – Nate

+0

這不防範SQL注入。與直接串接字符串沒有什麼不同。這被認爲,這實際上是WORSE而不是簡單地連接字符串,因爲你通過使用本質上無用的函數調用而具有錯誤的安全感。再次,這是不安全的,不是很好的做法。 –

0

不應該使用'mysql_query`

所有mysql_*功能已被取消 - 這意味着它即將不包含在語言,你的代碼將被打破。任何給您的建議,包括使用mysql_query函數是不好的建議,應該不予考慮。

查看文檔,並注意大紅色預警:http://php.net/manual/en/function.mysql-query.php

使用PDO來代替。建立起來很容易,而且你根本不需要做任何改變。

// note: untested code follows 
$pdo = new PDO('mysql:host='.$host.';dbname='.$db_name, $db_username, $db_password); 
$statement = $pdo->prepare(' 
    SELECT 
     user_id 
    FROM 
     `users` 
    WHERE 
     `name` = :name 
'); 

$result = $statement->execute(array(
    'name'=>trim($_POST['to_name']) 
)); 
$to_id = $result ? $statement->fetchColumn() : false; 

// now, check for failure before moving on! 
if (!$result || !$to_id){ 
    // tip: do something nicer than die to handle this failure. 
    die('Error occurred'.implode(":",$pdo->errorInfo())); 
} 

// everything is ok, code continues.... 

文檔

+0

好吧,我正在瀏覽網站,並且我讀到PDO只是連接到數據庫,是對的嗎?我是否仍然可以在我的php頁面中執行if語句或while語句? – nikito2003

+0

@ nikito2003 PDO是'mysql_ *'函數的一種可能的替代品,可以說是最好的。它只是您應該使用的數據庫訪問方法,它不會更改您的其他任何邏輯或代碼實踐。您的問題中的代碼易受「sql注入」(研究!)的影響,PDO有助於在正確使用時排除風險。否則,是的,你一直在代碼中執行所有相同的操作。 –

相關問題