准备好的SQL语句从数据库返回空白

时间:2014-02-18 08:50:13

标签: php mysql sql

这是以下代码(后面是解释):

<?php
error_reporting(E_ALL);
ini_set('display_errors',1);

$uname = $_POST['uname'];

if($uname!=""){
    $mysqli = new mysqli('localhost', 'root', '', 'dota_site_test');

    if(mysqli_connect_errno()){
        echo("connetion error: " . mysqli_connect_errno());
        exit();
    }

    $stmt = $mysqli->prepare("SELECT Username FROM users WHERE Username=?");

    $stmt -> bind_param("s", $uname);

    $stmt -> execute();

    $stmt -> bind_result($unamecheck);

    if($stmt->num_rows > 0){
        echo "taken: ";
        echo "name is ".$unamecheck;

    }else{
        echo "free: ";
        echo "name is ".$unamecheck;
    }
    $stmt -> close();

    $mysqli -> close();

}


?>

我不确定问题出在哪里,但当我在底部时,尝试echo "name is ". $unamecheck;,它只是返回空白。此代码的工作方式是在每次按键时运行查询以查看数据库中是否已存在用户名。我检查了我的Ajax,$uname = $_POST['uname'];工作正常。

另外,我在mysql本身中运行了查询“SELECT Username FROM users WHERE Username=?”,用我的用户名替换了?,并且运行正常。

我准备好的陈述是否犯了错误?我不确定这是否必须这样做,但我正在努力小心SQL注入。

我的测试结果只显示free: name is无论输入如何都被回显。没有其他错误代码。

2 个答案:

答案 0 :(得分:3)

您需要致电

$stmt -> fetch();

$stmt -> bind_result($unamecheck);

答案 1 :(得分:1)

在准备查询中,尝试分离=?从列名称,像这样:

SELECT Username FROM users WHERE Username = ?

如果这不起作用,请打印mysql_error()以验证是否存在mysql错误