2017-06-30 86 views
0

我使用mysqli獲取行,但它沒有給我行,並且查詢中沒有錯誤。沒有從Mysqli獲取行

$query="select * from members where useremail='$user_email' and password='$password'"; 
$result=$db->query($query); 
$row = $db->fetch_array($result); 
echo $row['id']; 

query功能

function query($query){ 
     $result=mysqli_query($this->conn, $query); 
     if(!$result){ 
      echo $this->err_msg = mysqli_error($this->conn); 
      return false; 
     }else{ 
      return $result; 
     } 
} 

fetch_array功能

function fetch_array($result){ 
    return mysqli_fetch_array($result); 
} 

我怎樣才能行使用mysqli

+4

你的代碼可能容易受到[** SQL注入**](https://en.wikipedia。 org/wiki/SQL_injection)攻擊。您應該通過[** mysqli **](https://secure.php.net/manual/en/mysqli.prepare.php)或[** PDO **](https ://secure.php.net/manual/en/pdo.prepared-statements.php)驅動程序。 [**這篇文章**](https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)有一些很好的例子。 –

+0

@AlexHowansky我使用mysqli。 –

+0

是的,但您沒有使用帶有綁定參數的預準備語句。 –

回答

1

更改原始代碼中使用mysqli的,這是比較安全的,且必須使用mysqli的編制報表

$query="select id from members where useremail=? and password=?"; // Don't use select *, select each column, ? are placeholders for your bind variables 
$stmt = $connection->prepare($query); 
if($stmt){ 
    $stmt->bind_param("ss",$user_email,$password); // Bind in your variables, s is for string, i is for integers 
    $stmt->execute(); 
    $stmt->bind_result($id); // bind the result to these variables, in the order you select 
    $stmt->store_result(); // Store if large result set, can throw error if server is setup to not handle more than x data 
    $stmt->fetch(); 
    $stmt->close(); 
    } 
echo $id; // this would be same as $row['id'], $id now holds for example 5. 

如果選擇多個工作的事情

$query="select * from members where useremail='$user_email' and password='$password'"; 
    $result=$db->query($query); 
    $row = $db->fetch_array($result); 
    echo $row['id']; 

到綁定參數來反映綁定參數,例如如"SELECT id,name FROM...",那麼當你bind_result(..)時,只需在那裏綁定它們。 $stmt->bind_result($id,$name);

現在$ id和$ name保存與該查詢匹配的行的列數據。如果將有多行匹配,而不是$ stmt-> fetch(),你會做

while($stmt->fetch()){ // just like while($row = $result->fetch_assoc()){} 
    echo $id; 
    echo $name 
} 
+0

如何獲得'$ row ['id']'並且我想將它存儲在會話中,我正在使用mysqli不使用預準備語句?我的意思是我想要一個完整的行然後從行中得到任何東西? –

+0

你會做''SELECT id ...'',然後bind_result($ id)。 $ row ['id']現在是$ id。是的,你使用mysqli,準備好的語句是一個想法,以防止SQL注入攻擊。 while($ stmt-> fetch())的每次迭代都會爲您提供與您在while($ row = $ result-> fetch_assoc())時執行操作相同的結果。現在可以使用$ id訪問$ row ['id']; – clearshot66