本当に何かに詰まっています。私はデータベースを更新しようとしていますが、コードは書かれています。もしそれをエコーしてphpMyAdminに直接貼り付けると、完全に動作しますが、コード自体は機能しません。それは働いていない理由を把握して、私はアイデアを完全によ...sqlステートメントはphpMyAdminで動作しますが、mysql_queryでは機能しません
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
)
";
私はちょうど今日(かなり好きですが)かもしれませんが、2番目のクエリ(DELETE ... NOT IN ...)はどのように動作するはずですか? – VolkerK
ありがとう!その書式ははるかに読みやすくなります。 deleteステートメントの仕組みは、特定のIPアドレスを持つすべてのセッションを選択してから、選択に含まれていないものをすべて削除することです。選択には1という制限があります。私は削除を数回試して、これまでのところうまくいっています... – Brendan
しかし、インナーセレクトは何とかIPアドレスに関連するべきではありません(つまり、ip = remote_addrのグループワイズ最大値を選択してください)?今はそうではありません。常にwp_dor_cart66_sessionsの_all_レコードの中で最も高いIDを選択します。 – VolkerK