准备查询在函数内不起作用

时间:2019-04-25 19:09:48

标签: php mysql function pdo

我想对数据库运行查询,并测试用户提交的信息是否与数据库中的信息相同。

$name = $_POST["name"];
$pass = $_POST["pass"];

使用PDO连接到数据库后,请执行以下操作:

$q1= $conn->prepare("SELECT username FROM users WHERE username=?");
$q1->execute([$name]);
$sql_name = $q1->fetchColumn();

$q2= $conn->prepare("SELECT password FROM users WHERE username=?");
$q2->execute([$name]);
$sql_pass = $q2->fetchColumn();`

然后,我检查用户输入是否与数据库匹配

if ($sql_name == $name) {
    echo "Username correct! <br>";
    if ($sql_pass == $pass) {
        $_SESSION['user'] = $name;
        $_SESSION['pass'] = $pass;
        header('Location: profile.php');
    } else {
        echo "Password incorrect!";
    }
} else {
    echo "Check your info!";
}

这正常工作,并且用户被转发到名为“ profile.php”的页面。

问题是,如果我想用这样的函数替换代码的中间部分:

function selectFrom($column, $table, $prop, $cond)
{
    $q= $conn->prepare("SELECT ? FROM ? WHERE ?=?");
    $result = $q->execute([$column, $table, $prop, $cond]);
    echo $result->fetchColumn();
}

$sql_name = selectFrom('username', 'users', 'username', $name); 
$sql_pass = selectFrom('password', 'users', 'username', $name);

我的代码的if ($sql_name == $name)部分无效。为什么会这样?

0 个答案:

没有答案