2013-11-14 37 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 
}