sql语句在phpMyAdmin中有效,但赢得了';不能在mysql_query中工作


sql statement works in phpMyAdmin but won't work in mysql_query

真的陷入了困境。我正在尝试更新一个数据库,代码看起来是写的——如果我将其回显并直接粘贴到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
        )
";
$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'] . ''")';

需要转义引号

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

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

如果您的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

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

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