0

我在尝试从我的表中检索用户 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 ...
4

3 回答 3

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
于 2013-05-29T21:08:42.173 回答
1

有两种方法可以做到。

$row在分配周围放置一个循环。

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

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

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($rows as $row) {
    //do something
}
于 2013-05-29T21:09:04.560 回答
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);
于 2013-05-29T21:19:02.270 回答