sql语句在phpMyAdmin中工作,但在mysql_query中不起作用

时间:2011-08-09 06:31:13

标签: php mysql phpmyadmin

真的卡在某事上。我正在尝试更新数据库并且代码看起来是写的 - 如果我将其回显并将其直接粘贴到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 :(得分:0)

$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'] . '\")';

需要转义引号

答案 1 :(得分:0)

看起来像引用错误,试试这个:

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

答案 2 :(得分:0)

如果可能是您的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)';

...注意LIMIT 1

答案 3 :(得分:0)

您确定第一个查询没有删除所有匹配的行吗?

我不理解第一个查询结尾处的“user_data”部分。但是我会在每次查询之后检查受影响的行数,看看查询是否对数据有任何影响,如果是,它是否运行良好,或者只是存在一些逻辑错误。