2016-04-05 133 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 />"; 
    } 
相关问题