SQL-оператор работает в phpMyAdmin, но не работает в mysql_query - PullRequest
0 голосов
/ 09 августа 2011

Действительно застрял на чем-то. Я пытаюсь обновить базу данных, и код выглядит записанным - и если я вывожу его на экран и вставляю прямо в phpMyAdmin, он работает отлично - но сам код не работает ... Я потратил целый день, пытаясь выяснить, почему это не работает, и я совершенно вне идей ...

function restoreSession() 
{

mysql_connect("theHost", "root", "rootPWD") or die(mysql_error());
mysql_select_db("myDatabase") or die(mysql_error());    

$restore_cmd = 'UPDATE wp_dor_cart66_sessions SET user_data = (SELECT user_data FROM wp_dor_cart66_stored_sessions WHERE ip_address = "' . $_SERVER['REMOTE_ADDR'] . '")';

$clean_up = "DELETE FROM `wp_dor_cart66_sessions` WHERE `ip_address` = \"" . $_SERVER['REMOTE_ADDR'] . "\" AND id NOT IN (SELECT id FROM ( SELECT id FROM `wp_dor_cart66_sessions` ORDER BY id DESC LIMIT 1 ) user_data )";

mysql_query($clean_up) or die('Query failed: ' . mysql_error()); 
$result = mysql_query($restore_cmd) or die('Query failed: ' . mysql_error()); 
echo "<br/>";
echo $restore_cmd;
echo "<br/>";
var_dump($result);
echo "<br/>";
print_r($result);
}

Полученный результат выглядит следующим образом:

UPDATE wp_dor_cart66_sessions SET user_data = 
(SELECT user_data FROM   wp_dor_cart66_stored_sessions 
WHERE ip_address = "196.54.110.24");

bool(true)

1

Кажется, что нет никаких ошибок - но я просто не могу его обновить. Если бы это не сработало в phpMyAdmin - я бы знал, что с SQL что-то не так - но это кажется правильным ... У меня просто нет идей - любая помощь будет принята с благодарностью!


Вот снова утверждения с некоторым форматированием:

$restore_cmd = '
    UPDATE
        wp_dor_cart66_sessions
    SET
        user_data = (
            SELECT
                user_data
            FROM
                wp_dor_cart66_stored_sessions
            WHERE
                ip_address = "' . $_SERVER['REMOTE_ADDR'] . '"
        )
';

$clean_up = "
    DELETE FROM
        `wp_dor_cart66_sessions`
    WHERE
        `ip_address` = \"" . $_SERVER['REMOTE_ADDR'] . "\"
        AND id NOT IN (
            SELECT
                id
            FROM
                (
                    SELECT
                        id
                    FROM
                        `wp_dor_cart66_sessions`
                    ORDER BY
                        id DESC
                    LIMIT
                        1
                ) user_data
        )
";

Ответы [ 4 ]

0 голосов
/ 09 августа 2011

Вы уверены, что первый запрос не удаляет все совпадающие строки?

Я не понимаю часть "user_data" в конце первого запроса.Но я бы проверил количество затронутых строк после каждого запроса, чтобы увидеть, оказывает ли запрос какое-либо влияние на данные, и если это так, хорошо ли это или просто какая-то логическая ошибка.

0 голосов
/ 09 августа 2011

Похоже, ошибка цитирования, попробуйте это:

"UPDATE wp_dor_cart66_sessions SET user_data = (SELECT user_data FROM wp_dor_cart66_stored_sessions WHERE ip_address = '" . $_SERVER['REMOTE_ADDR'] . "')";
0 голосов
/ 09 августа 2011

Если может быть, что у вас есть несколько результатов в вашем SELECT.Что делать, если вы ...

$restore_cmd = 'UPDATE wp_dor_cart66_sessions SET user_data = (SELECT user_data FROM wp_dor_cart66_stored_sessions WHERE ip_address = "' . $_SERVER['REMOTE_ADDR'] . '" LIMIT 1)';

... обратите внимание на ПРЕДЕЛ 1

0 голосов
/ 09 августа 2011
$restore_cmd = 'UPDATE wp_dor_cart66_sessions SET user_data = (SELECT user_data FROM wp_dor_cart66_stored_sessions WHERE ip_address = \"' . $_SERVER['REMOTE_ADDR'] . '\")';

необходимо экранировать кавычки

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