查询返回空时出现语法错误或访问冲突

时间:2013-12-27 17:03:11

标签: php mysql laravel

如果查询没有返回任何内容,我会收到一些奇怪的错误。我该如何妥善处理?

错误:

  

SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在第1行的“)”附近使用正确的语法(SQL:选择usersuidfirst_namelast_name ,IFNULL(files.filename,'default.jpg')AS avatar,来自privacy users的{​​{1}} user_avatars users uid = {{1} } {。{1}}在user_avatars uid = filesuser_avatars其中fid files {}离开加入fidusers在())

代码:

uid

更新

我尝试添加$me = User::loggedin(); $contacts = DB::table('contacts') ->where('status', 'contact') ->where('uid_by', $me) ->orWhere('uid_to', $me) ->select( DB::raw("IF(uid_by = $me, uid_to, uid_by) AS user_id") ) ->paginate(10); if ($contacts != null) { $users_id = array(); foreach ($contacts as $contact) { $users_id[] = $contact->user_id; } $data = DB::table('users') ->leftJoin('user_avatars', 'users.uid', '=', 'user_avatars.uid') ->leftJoin('files', 'user_avatars.fid', '=', 'files.fid') ->whereIn('users.uid', $users_id) ->select('users.uid', 'first_name', 'last_name', DB::raw('IFNULL(files.filename, \'default.jpg\') AS avatar'), 'privacy') ->get(); return Response::json(array('contacts' => $data)); } //if no data was returned return Response::json(array('contacts' => 0)); ,但它返回了很多与laravel相关的对象。

另一方面,如果我添加?page = 1,则返回2个联系人SUCCESSFULLY 如果我添加?page = 2,那么它会给出错误。 (可能是因为没有数据)但我想妥善处理这个问题。

3 个答案:

答案 0 :(得分:0)

 if ($contacts != null) {
    $users_id = array();

    foreach ($contacts as $contact) {
        $users_id[] = $contact->user_id;
    }

您的代码部分无效。做一个var_dump($ contacts);并看看它到底是什么,因为它不能为空,看起来它只是一个空数组。

答案 1 :(得分:0)

你需要在线上加上一些逻辑

>whereIn('users.uid', $users_id)

因为你已经链接了这些电话,所以你不能简单地在那条线路上放一个if(不管它在逻辑上是否正常工作。也许这样就可以了..

if ($users_id){
$data = DB::table('users')
                            ->leftJoin('user_avatars', 'users.uid', '=', 'user_avatars.uid')
                            ->leftJoin('files', 'user_avatars.fid', '=', 'files.fid')
                            ->whereIn('users.uid', $users_id)
                            ->select('users.uid', 'first_name', 'last_name', DB::raw('IFNULL(files.filename, \'default.jpg\') AS avatar'), 'privacy')
                            ->get();
} else {$data = null; /*or empty set however that is defined in your framework*/ }

答案 2 :(得分:0)

在MySQL中,您无法使用IN传递空数据集。例如,SELECT id FROM users WHERE id IN ()不是有效的SQL。 Laravel不足以纠正这个问题;所以你需要做一个调整。快速解决方法是将非0成员添加到数据集中。 (在这种情况下,可以安全地假设没有数据的主键为0。)

例如,在您的代码中:

$users_id = array(0);

foreach ($contacts as $contact) {
    $users_id[] = $contact->user_id;
}