Странный mysql, показывает 0 результатов из myAdmin, но возвращает строки в PHP PDO - PullRequest
0 голосов
/ 21 января 2012

У меня есть этот запрос, который я запускаю в phpMyAdmin

SELECT m.msgFrom, m.msgTo, m.msgID, m.subject, m.dateTime, a.username
FROM mailbox m
JOIN accounts a ON ( a.id = IF( m.msgTo =1, m.msgFrom, m.msgTo ) ) 
WHERE msgTo =1
OR msgFrom =1
AND parentID =0
AND IF( m.msgTo =1, m.fromDelete, m.toDelete ) !=1
ORDER BY DATETIME DESC 
LIMIT 250

И я получаю набор строк 0.

При использовании его с PDO PHP и такими местозаполнителями,

$q = $dbc -> prepare("
SELECT m.msgFrom, m.msgTo, m.msgID, m.subject, m.dateTime, a.username 
FROM mailbox m JOIN accounts a ON (a.id = IF(m.msgTo = ?, m.msgFrom, m.msgTo)) 
WHERE msgTo = ? OR msgFrom = ? AND parentID = 0 AND IF(m.msgTo = ?, m.fromDelete, m.toDelete) != 1 
ORDER BY dateTime DESC LIMIT 250");
$q -> execute(array($user['id'], $user['id'], $user['id'], $user['id']));

Я получаю набор строк 1, где $user[id'] == 1.

Что здесь происходит и как я могу это исправить?

1 Ответ

2 голосов
/ 21 января 2012

И имеет более сильную привязку, чем OR в mysql

WHERE msgTo =1
OR msgFrom =1
AND parentID =0
AND IF( m.msgTo =1, m.fromDelete, m.toDelete ) !=1

означает, что

WHERE msgTo =1
OR (msgFrom =1
AND parentID =0
AND IF( m.msgTo =1, m.fromDelete, m.toDelete ) !=1)

PDO может обрабатывать это по-другому

try

WHERE (msgTo =1
OR msgFrom =1)
AND parentID =0
AND IF( m.msgTo =1, m.fromDelete, m.toDelete ) !=1

в phpmyadmin

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...