2013-11-14 76 views
1

我想要的是在查詢中用post變量查詢我的數據庫。這不是真的爲我工作,有誰知道如何正確地做到這一點? 這是我到目前爲止。使用POST變量回應Mysqli查詢?

$query = "SELECT column FROM `table` WHERE 'name' = '$_POST[checkname]'"; 
$result = mysqli_query($db, $query) or die ("no query"); 
$cod = mysqli_fetch($result); 
echo $cod; 

任何幫助表示讚賞。多謝你們。

+0

[Escaping](http://www.php.net/manual/en/mysqli.real-escape-string.php)將有助於正確地做到這一點。更好的是Mysqli已經支持的[bound params](http://www.pontikis.net/blog/dynamically-bind_param-array-mysqli)。 – mario

回答

5

Mysqli支持準備好的語句,可防止SQL注入攻擊。它看起來是這樣的:

/* Create a prepared statement */ 
$stmt = $mysqli -> prepare("SELECT column FROM table WHERE name=?"); 

/* Bind parameters */ 
$stmt -> bind_param("s", $_POST['checkname']); 

/* Execute it */ 
$stmt -> execute(); 

/* Bind results */ 
$stmt -> bind_result($result); 

/* Fetch the value */ 
$stmt -> fetch(); 

echo $result; 

查看manual瞭解更多信息。

的簡要介紹,以響應註釋:

  • $stmt->prepare("..."),你形成你的查詢,你持有任何變量你打算用用「的地方?」

  • $stmt -> bind_param(...)中,您將變量綁定到相應的問號。第一個參數是類型,下面的參數是變量。如果您使用的是字符串和整數,在括號內部,它看起來就像"si", $stringVar, $intVar

  • $stmt -> bind_result(...)您說明您要綁定的結果。如果查詢是針對某個名稱和年齡的,那麼該內容看起來就像$name, age

  • $stmt->fetch()中,您正在獲取結果。如果是多行回來,你會做這樣的事情:

    而($ stmt->取()){// 代碼在這裏 }

或者,你可以使用PDO。它看起來像這樣:

/* Create a prepared statement */ 
$stmt = $pdo->prepare("SELECT column FROM table WHERE name=:checkname"); 

/* Bind parameters */ 
$stmt->bindParam(':checkname', $_POST['checkname']); 

/* Execute it */ 
$stmt->execute(); 

/* Fetch results */ 
$obj = $stmt->fetchObject(); 

echo $obj->column; 

查看manual瞭解更多信息。

+0

謝謝你。我並沒有及時瞭解最新發生的事情,但是我將它改編成我的,並且很有效,所以謝謝! :) –

+0

沒問題,任何時候!我更新了我的答案,簡要說明了代碼中正在發生的事情。請享用! –

-1

它的工作原理,只是嘗試一下這樣的

下面的代碼...

if(isset($_POST['checkname'])) 
    { 
     //to avoid SQL injections 
     $post = mysql_real_escape_string(trim($_POST['checkname'])); 

     $query = "SELECT column FROM `table` WHERE name = '$post'";`` 
     $result = mysqli_query($db, $query) or die ("no query"); 
     $cod = mysqli_fetch($result); 
     echo $cod; 
    } 
+0

該行應該是'$ post = mysqli_real_escape_string(trim($ _ POST ['checkname']));'因爲它現在缺少「我」。但是,準備好的陳述是更好的途徑。 –

0

//這是apsulutly

//工作

如果(isset( $ _POST ['checkname'])) {

$post = mysql_real_escape_string(trim($_POST[' checkname '])); 

    $query = "SELECT column FROM `table` WHERE name = '$post'"; 
    $result = mysqli_query($db, $query) or die ("no query"); 
    $cod = mysqli_fetch_all($result); 
    echo implode($cod[0]); 
    echo implode($cod[1]);//For particular cell 
}