真的陷入了困境。我正在尝试更新一个数据库,代码看起来是写的——如果我将其回显并直接粘贴到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"部分。但我会在每次查询后检查受影响的行数,看看查询是否对数据产生了任何影响,如果是,它是否运行良好,或者只是存在一些逻辑错误。