2016-04-05 195 views
0

我知道這已被問過,但我似乎無法修復我的代碼。 我需要的是運行一些php代碼來查詢mysql使用mysqli爲選擇語句來檢索我的bcrypt散列通過,所以我可以比較用戶輸入和用戶散列密碼。注意:我還沒有將mysql_real_escape_string添加到我的$ POST變量中。如何使用mysqli在php變量中存儲mysql select語句

我已經改變了這個代碼一千次仍不能得到它。 我甚至使用num_row 和printf($ row ['pass'])將一個簡單的查詢腳本複製並粘貼到一個新文件中;使用回聲等.....我用過取數組ive嘗試幾乎所有我已經通過php的所有php的php.net w3c.com等等是我的系統壞了? mysqli是否有bug?沒有我不想要切換到PDO我不會停止,直到這個是固定的,當不再有SQL注入vulns 繼承人我的代碼:

<?php 
    $conn = new mysqli('localhost', 'root', '', 'social'); 
    if (mysqli_connect_errno()) 
    { 
     exit("connection failed" . mysqli_connect_error()); 
    } 
    else 
    { 
     echo "connection established"; 
    } 
    $db=mysqli_select_db($conn,'social'); 

    if ($_POST && isset($_POST['submit'], $_POST['password'], $_POST['email'])) 
    { 
     $pass = ($_POST["password"]); 
     $email =($_POST["email"]); 

     $bcrypt = password_hash($pass, PASSWORD_BCRYPT, array('cost' => 12)); 
    } 
    $query = "SELECT `pass` FROM `social` WHERE `email` = '[email protected]'"; 
    $fetcher = mysqli_fetch_assoc($query); 
    echo $fetcher; 

    if ($conn->query($fetcher) === TRUE) 
    { 
     echo "query has gone through now we need to store the hash<br /> for comparison"; 
    } 
    else 
    { 
     echo "error did not retrieve hash info"; 
    } 
+0

你設置了很多變數,但不使用它們的查詢後,從獲取數據庫中的值。目前還不清楚你的腳本正在做什麼。這顯然是一個登錄腳本,但一切都是硬編碼,你實際上並沒有做任何驗證 – Machavity

+0

不驗證,但我只是關心將MySQL的選擇語句存儲到PHP變量,所以我可以從數據庫中使用哈希使用bcrypt驗證類似於php.net – nate35795

+0

另外,沒有使用的變量集n僅僅是因爲我已經在這兩天了。你應該看到所有已註銷的代碼,我刪除befor發佈這個笑聲... – nate35795

回答

2
$query = "SELECT `pass` FROM `social` WHERE `email` = '[email protected]'"; 
$fetcher = mysqli_fetch_assoc($query); 

,才能從的結果fetch記錄查詢,您需要實際執行查詢。您的代碼應該是

$query = "SELECT `pass` FROM `social` WHERE `email` = '[email protected]'"; 
$result = $conn->query($query); // This is where the query is executed 
$fetcher = $result->fetch_assoc(); 

還有兩點。

首先,您不需要撥打mysqli_select_db;您已在構造函數調用中選擇了數據庫,因此如果您想訪問不同的數據庫,則只需調用mysqli_select_db即可。

二,而不是調用mysql_real_escape_string你應該看看使用prepared statements,它們做同樣的事情,也正確處理類型匹配和引用。

+0

$ db變量是舊的,我還沒有把它拿出來,但我已經改變了這個代碼1000倍誠實。 2天試用代碼。 ive甚至有你說的方式,並返回null ... – nate35795

+0

請發表一個表'社交'的描述,請。 –

+0

我的數據庫可能是問題嗎?我已經完成了大部分關於使用mysqli的教程......所有我能想到的是,sql查詢甚至不會經歷像糟糕的語法,或者也許PHP沒有正確地實現它。 ive甚至做了一個簡單的腳本測試我複製和粘貼,並更改數據庫查詢,以適應我的分貝,但仍然得到錯誤... ive呼籲名稱ID電子郵件IDK什麼是錯誤的這.... – nate35795

1

嘗試執行

$query = "SELECT `pass` FROM `social` WHERE `email` = '[email protected]'"; 

$executedQuery = $conn->query($query); 

if($executedQuery) { 
    $fetcher = mysqli_fetch_assoc($executedQuery); 
    echo "query has gone through ---------"; 
} else { 
    echo "error did not retrieve hash info"; 
} 
+0

我把它設置爲這樣,我得到空我不知道有多少種方法我試過。 – nate35795

0
$query = "SELECT pass FROM social WHERE id = 11"; // took the (``) out of the query and added this im assuming the value is stored in the $row variable and I may be able to use $row with the user input to verify hash via bcrypt!!! 
    $result = $conn->query($query); 

    while($row = mysqli_fetch_array($result)) 
    { 
    echo $row['pass']; 
    echo "<br />"; 
    } 
相關問題