2014-10-22 2 views
0

Я делаю небольшое приложение электронной почты через php, javascript и работаю по большей части. Когда я теряюсь, при попытке настроить запрос, чтобы получить электронные письма, которые были удалены и отправлены в корзину. Запрос, который я написал, по-видимому, отлично работает, когда я напрямую запрашивал базу данных, но не работает при запуске с PHP. Пожалуйста, помогите мне с этой расстраивающей проблемой, любая помощь будет принята с благодарностью.PHP mysql query with temp table не работает

Структура электронной почты для электронной почты ниже.

TABLE messages (
    'mid' int, 
    'folderfrom' int, //where message is stored for the user who sent it 
    'msgfrom' text, //user sending message 
    'msgto' text, //user getting message 
    'subject' text, 
    'msgdate' timestamp, 
    'msg' text, 
    'folderto' int, //where message is stored for recieving user. 
) 

Ниже приведен код, который я использую для создания и выполнения запросов. Я попытался запустить последнее условие else в одной строке, но это не сработало.

if ($foldernum == 1) { 
    $querytorun = "SELECT ms.mid as 'id', ms.folderto as 'folder', ms.msgfrom as 'name', ms.msgto as 'email', ms.subject as 'subject', ms.msgdate as 'date', ms.msg as 'msg' FROM messages as ms WHERE ms.msgto LIKE '{$usercode}' AND ms.folderto = {$foldernum}"; 
} elseif ($foldernum == 2) { 
    $querytorun = "SELECT ms.mid as 'id', ms.folderfrom as 'folder', ms.msgfrom as 'name', ms.msgfrom as 'email', ms.subject as 'subject', ms.msgdate as 'date', ms.msg as 'msg' FROM messages as ms WHERE ms.msgfrom LIKE '{$usercode}' AND ms.folderfrom = {$foldernum}"; 
} else { 
    $querytorun = "CREATE TEMPORARY TABLE tempfolder('id' int,'folder' int, 'name' text,'email' text,'subject' text,'date' datetime,'msg' text)"; 
    $res = mysql_query($querytorun); 
    $querytorun = "INSERT INTO tempfolder SELECT mst.mid as 'id', mst.folderto as 'folder', mst.msgfrom as 'name', mst.msgto as 'email', mst.subject as 'subject', mst.msgdate as 'date', mst.msg as 'msg' FROM messages as mst WHERE mst.msgto LIKE '{$usercode}' AND mst.folderto = {$foldernum}"; 
    $res = mysql_query($querytorun); 
    $querytorun = "INSERT INTO tempfolder SELECT mst.mid as 'id', mst.folderfrom as 'folder', mst.msgto as 'name', mst.msgfrom as 'email', mst.subject as 'subject', mst.msgdate as 'date', mst.msg as 'msg' FROM messages as mst WHERE mst.msgfrom LIKE '{$usercode}' AND mst.folderfrom = {$foldernum}"; 
    $res = mysql_query($querytorun); 
    $querytorun = "SELECT * FROM tempfolder"; 
} 

$res = mysql_query($querytorun); 

while($rs = mysql_fetch_object($res)) { 
    $arr[] = $rs; 
} 

echo json_encode($arr); 
+1

попробуйте использовать ['mysql_error()'] (http://php.net/manual/en/function.mysql-error.php); также, почему вы не используете mysqli? Еще лучше, почему не используют PDO? –

+0

Я очень новичок в PHP, это мой первый проект. Больше используется для nodejs. Сейчас я ищу PDO. –

+1

В этом случае вот несколько советов: используйте PHP 5.4 или новее (или, если необходимо, 5.3.7+); не храните пароли, даже если вы их зашифруете (используйте хэширование); использовать XAMPP, Sublime Text и Filezilla; Изучите и используйте Git/Github (очень важно); прежде чем что-то сделать, проверьте, сделал ли кто-нибудь еще это; Apache или Nginx не имеет значения; ООП важен; Используйте много комментариев коментария !; PSR-4 FTW; читайте комментарии php.net при поиске функций. –

ответ

0

Так я понял это сам я в конечном итоге установить его в качестве одного запроса без временной таблицы. Вместо этого я объединил все с двумя запросами, которые работали.

$querytorun = "SELECT mst.mid as 'id', mst.folderto as 'folder', mst.msgfrom as 'namefrom', mst.msgto as 'nametoo', mst.subject as 'subject', mst.msgdate as 'date', mst.msg as 'msg' FROM messages as mst WHERE mst.msgto LIKE '{$usercode}' AND mst.folderto = {$foldernum} UNION ALL SELECT mst.mid as 'id', mst.folderfrom as 'folder', mst.msgto as 'nametoo', mst.msgfrom as 'namefrom', mst.subject as 'subject', mst.msgdate as 'date', mst.msg as 'msg' FROM messages as mst WHERE mst.msgfrom LIKE '{$usercode}' AND mst.folderfrom = {$foldernum}"; 
1

Попробуйте использовать обратные выходы вместо одиночной кавычки.

CREATE TEMPORARY TABLE tempfolder(`id` int,`folder` int, `name` text,`email` text,`subject` text,`date` datetime,`msg` text) 
+0

Уже пробовал, что я переключился на одну цитату, так как она не сработала. –

0
$querytorun="CREATE TEMPORARY TABLE tempfolder('mid' int, 
    'folderfrom' int, //where message is stored for the user who sent it 
    'msgfrom' text, //user sending message 
    'msgto' text, //user getting message 
    'subject' text, 
    'msgdate' timestamp, 
    'msg' text 
)"; 
mysql_query($querytorun); 
if ($foldernum == 1) { 
    $querytorun = "SELECT ms.mid as 'id', ms.folderto as 'folder', ms.msgfrom as 'name', ms.msgto as 'email', ms.subject as 'subject', ms.msgdate as 'date', ms.msg as 'msg' FROM messages as ms WHERE ms.msgto LIKE '{$usercode}' AND ms.folderto = {$foldernum}"; 
} elseif ($foldernum == 2) { 
    $querytorun = "SELECT ms.mid as 'id', ms.folderfrom as 'folder', ms.msgfrom as 'name', ms.msgfrom as 'email', ms.subject as 'subject', ms.msgdate as 'date', ms.msg as 'msg' FROM messages as ms WHERE ms.msgfrom LIKE '{$usercode}' AND ms.folderfrom = {$foldernum}"; 
} else { 
    $querytorun = "CREATE TEMPORARY TABLE tempfolder('id' int,'folder' int, 'name' text,'email' text,'subject' text,'date' datetime,'msg' text)"; 
    $res = mysql_query($querytorun); 
    $querytorun = "INSERT INTO tempfolder SELECT mst.mid as 'id', mst.folderto as 'folder', mst.msgfrom as 'name', mst.msgto as 'email', mst.subject as 'subject', mst.msgdate as 'date', mst.msg as 'msg' FROM messages as mst WHERE mst.msgto LIKE '{$usercode}' AND mst.folderto = {$foldernum}"; 
    $res = mysql_query($querytorun); 
    $querytorun = "INSERT INTO tempfolder SELECT mst.mid as 'id', mst.folderfrom as 'folder', mst.msgto as 'name', mst.msgfrom as 'email', mst.subject as 'subject', mst.msgdate as 'date', mst.msg as 'msg' FROM messages as mst WHERE mst.msgfrom LIKE '{$usercode}' AND mst.folderfrom = {$foldernum}"; 
    $res = mysql_query($querytorun); 
    $querytorun = "SELECT * FROM tempfolder"; 
} 

$res = mysql_query($querytorun); 

while($rs = mysql_fetch_object($res)) { 
    $arr[] = $rs; 
} 

echo json_encode($arr); 
+0

Что изменилось, я ничего не вижу. –

+0

вы попробовали этот код --- он работает .. –

+0

нет, он не .... просто попробовал его проверить. все, что вы сделали, это добавить мою таблицу create наверху ... –