2015-11-23 95 views
-1

我想爲一個類進行登錄(所以我沒有考慮現在防止SQL注入),並且我在使用行計數來查看我是否可以登錄時遇到問題。PHP SQL row count

如何計算選擇的行數?我嘗試了一些不起作用的東西。

我得到的錯誤是在有評論的行中。

$host = "localhost"; 
$serverusername = "root"; 
$serverpassword = ""; 
$database = "usuarios"; 
$table = "user"; 

$username = $_POST['username']; 
$password = $_POST['password']; 

$mysqli = new mysqli($host, $serverusername, $serverpassword, $database); 
if ($mysqli->connect_errno) { 
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; 
} 
$query = "SELECT * FROM ".$table." WHERE `username` = ".$username." AND `password` = ".$password; 


$result = $mysqli->query($query); 
$row = $result -> num_rows; //this line has an error. Trying to get property of non-object 

if ($row != 0) 
{ 
header('Location : index.html'); 
die(); 
} 
else 
{ 
    echo "password incorrecta!"; 
} 


$mysqli -> close(); 
+4

您的代碼包含語法錯誤。 請查閱以下鏈接http://php.net/manual/en/mysqli.error.php和http://php.net/manual/en/function.error-reporting.php 並將其應用於您的代碼。 –

+1

密碼可能是一個字符串。並看看準備好的語句 – Strawberry

+0

爲了防止你的代碼從SQL注入,使用[PDO ::準備](http://php.net/manual/en/pdo.prepare.php) –

回答

1

你需要把引號$ USERNAME$密碼

$query = "SELECT * FROM $table WHERE `username` = '$username' AND `password` = '$password'"; 

此代碼是容易受到SQL注入。

+1

$表不需要在引號? – user3651164

+0

不,$表不需要在引用。 – user2182349

+0

雖然我仍然得到同樣的問題。我已經編輯了第一篇文章,請在評論中查看該行,謝謝s – user3651164

0

假設您已將錯誤報告設置爲打開(因爲您提供了錯誤),下一步是對查詢或輸出進行疑難解答。

要看看有什麼不對您的查詢嘗試調試它下面是如何調試查詢的

  1. 呼應查詢到屏幕

    $query = "SELECT * FROM ".$table." WHERE `username` = ".$username." AND `password` = ".$password; 
    echo $query; 
    
  2. 從屏幕拷貝打印出來的查詢

  3. 在你執行查詢db manager(phpmyadmin)

  4. 閱讀SQL錯誤和

  5. 改變您的查詢相應

如果查詢給出正確的輸出,那麼問題就與被你查詢後運行的代碼。否則你必須在這裏添加你的sql錯誤,所以我們可以修復。

旁註:

不應該$row = $result -> num_rows;$row = $result->num_rows;(如果它的事項不知道,多餘的空間)

注2:閱讀註釋

也許你以後密碼被存儲爲「散列」,現在你正在查詢(而不是「散列」)。根據你在你的數據庫中散列密碼的方式,你應該相應地對密碼進行散列。

+0

好的,我已修復查詢。 $ query =「SELECT * FROM」。$ table。「WHERE'username' ='」。$ username。「'AND'password' ='」。$ password。「'」; 這使得參數在查詢中被讀爲字符串。但我仍然很擔心num_rows的東西不起作用。 – user3651164

+0

你遵循了我爲你準備的所有步驟嗎?執行打印的查詢以查看它的錯誤。 – davejal

+0

是的,我遵循每一步。我甚至使用phpmyadmin。並且有一個錯誤。 從SELECT COUNT(*)FROM用戶WHERE'username' =羅布和'password' =沒有 .... TO ... SELECT COUNT(*)FROM用戶WHERE'username' = '搶' 去了AND'password' ='no' 注意''將它們分類爲字符串 – user3651164