Laravel查询生成器 - 从传统SQL迁移

时间:2015-12-28 14:24:58

标签: php mysql laravel laravel-5

所以我慢慢开始将我的网站迁移到Laravel和我',发现至少可以说是非常具有挑战性的。我现在必须重写所有传统的sql语句,并且文档没有提供常见sql查询的简单片段。下面是我的登录脚本,我花了几个小时试图找出如何转换..

$query = "SELECT * FROM users WHERE email='$email' AND password='$password'";
$result = mysqli_query($connection, $query);
$count = mysqli_num_rows($result);

if ($count > 0) {
    $row = mysqli_fetch_array($result);

    if ($row['verified'] == 1) {
        echo "Valid";
    } elseif ($row['verified'] == 0) {
        echo "not aValid";
    }
} elseif ($count == 0) {
    echo "not Valid";
}

非常感谢任何帮助或指导。我需要指出正确的方向,如何做这样的简单查询,因为我的网站充满了很多。我开始认为我可能以错误的方式编写了我的逻辑。

1 个答案:

答案 0 :(得分:0)

感谢Laravel' Query Builder,您可以轻松完成转换查询:

$user = DB::table('users')->where(['email' => $email, 'password' => $password])->first();

if (!is_null($user)) {
    if ($user->verified) {
        echo 'Valid';
    } else {
        echo 'Not Valid';
    }
} else {
    echo 'Not Valid';
}

如果您的查询不是非常复杂,那么使用查询构建器构建查询实际上是一个非常简单的过程。你应该深入阅读the documentation,你应该没事。此外,当您的查询似乎没有返回您期望的结果时,您始终可以使用toSql方法返回包含正在生成的SQL查询的字符串,因此:

dump(DB::table('users')->where(['email' => $email, 'password' => $password])->toSql());

将打印出来:

select * from `users` where (`email` = ? and `password` = ?)

问号是条件中使用的实际值的占位符,因为Laravel使用PDO绑定来构建查询,这意味着在将值传递给构建器时不需要转义值,所以不用担心SQL injection

话虽这么说,但在我看来,您正在尝试使用该查询对用户进行身份验证。如果是这种情况,我强烈建议您使用属于Laravel的Authentication System