使用where运算符从表中获取所有值

时间:2013-05-29 21:03:51

标签: php mysql pdo

我无法尝试从我的表中检索用户ID不等于会话ID的所有记录,并且列X中的值大于列Y的值。我想返回我的结果是一个循环。

到目前为止我的代码是......

// Select all users that arent the current session users and have a 
// higher integer in bank column than that of the credits column

$stmt = $conn->prepare('SELECT * FROM users WHERE user_id!=? AND user_bank <= user_credits');
$stmt->bindParam(1, $uid, PDO::PARAM_INT);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);

// Return all records in a loop

我该如何做到这一点?


错误记录

[Wed May 29 21:08:49 2013] [error] [client 89.240.62.228] PHP Fatal error:  Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''19497918' AND user_bank <= user_credits' at line 1' in ...

3 个答案:

答案 0 :(得分:1)

循环将类似于:

while( $row = $stmt->fetch(PDO::FETCH_ASSOC) ) {
    print_r( $row );
}

从表中选择已知列是一种很好的做法。此外,您可以将<>用于不等运算符。

SELECT user_id, user_bank, user_credits
FROM users 
WHERE user_id <> ? 
    AND user_bank <= user_credits

答案 1 :(得分:1)

有两种方法可以做到。

围绕$row作业循环。

while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
   //do something
}

或者,只需使用fetchAll()然后循环就可以了。 (这对大型数据库不利)

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($rows as $row) {
    //do something
}

答案 2 :(得分:0)

跟进我的评论...

在使用PDO :: PARAM_INT之前看到这个之后我过去使用过的解决方案就是像这样输入你的变量:

$stmt = $conn->prepare('SELECT * FROM users WHERE user_id!=? AND user_bank <= user_credits');
$stmt->bindParam(1, (int)$uid, PDO::PARAM_INT); // <-- here
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);