PHP,mysql_query只是不工作

时间:2012-02-01 07:11:55

标签: php mysql phpmyadmin sql-update

我准备把头发拉出来......

这非常有效:

$link = mysql_connect('localhost', 'prototype_wp_usr', 'password') or die("Error: " . mysql_error());
mysql_select_db('prototype_wp');
$query = "INSERT INTO wp_zsession_capture
        (id, session_id, user_login, first_name, last_name, user_email, phone_number, last_conviction)
        VALUES (
            'NULL', 
            '". session_id() ."',
            '". $_POST['user_login'] ."',
            '". $_POST['first_name'] ."',
            '". $_POST['last_name'] ."',
            '". $_POST['user_email'] ."',
            '". $_POST['phone_number'] ."',
            '". $_POST['last_conviction'] ."'
        )";

mysql_query($query) or die ('Error updating database: ' . mysql_error());
mysql_close($link);

NOT 工作:

$link = mysql_connect('localhost', 'prototype_wp_usr', 'password') or die("Error: " . mysql_error());
mysql_select_db('prototype_wp');
$query = "UPDATE wp_zsession_capture SET removed = 1 WHERE session_id = '$sessionid'";

mysql_query($query) or die ('Error updating database: ' . mysql_error());
mysql_close($link);

这两段代码在一个表单中......如果表单中有错误,则运行FIRST sql查询以保存该点在会话中的任何内容。如果没有错误,并且在其他一些事情发生之后,运行SECOND sql查询以更新“删除”'这些先前保存的条目中的状态。

我一直在修补一百万个替代语法,我无法将这些行更新为UPDATE。当我在phpMyAdmin中执行原始SQL时,它工作正常。这没有什么合乎逻辑的......或者我可能非常疲惫。

仅供参考:$ sessionid = session_id();

- 更新 -

我非常感谢所有人的关注,但让我谈谈一些事情:

  1. 是的,我的表中有一个名为'删除的列' ... 你是认真的吗? :P
  2. 我当然正在使用session_start();
  3. 是的,我正在检查$ sessionid以确保它被调用。它始终在页面上回显,也在我执行的任何die语句中。
  4. FIRST查询负责创建SECOND查询应该更新的行...所以数据就在那里。
  5. mysql_error()没有产生任何东西......根本就没有错误。
  6. 我再次感谢您的关注,但到目前为止,所有建议都经过了尝试并再次尝试过。

    enter image description here

5 个答案:

答案 0 :(得分:9)

使用mysql_error()从数据库中获取错误消息,如下所示:

mysql_query($query) or die ('Error updating database: '.mysql_error());

错误可能是很多事情之一,例如用户可能没有DELETE权限。如果您不使用mysql_error(),则无法知道发生了什么。

修改您的session_id列中的数据看起来很短。检查session_id返回的字符串的长度,并检查数据库中的列长度。插入对于列来说太长的数据不是错误,但它会裁剪数据。

答案 1 :(得分:3)

你试过检查......

  1. 调用脚本时$sessionid的值是什么
  2. mysql返回什么错误(如果有的话)?
  3. 您可以通过将die()更改为...

    来执行后者
    mysql_query($query) or die (mysql_error());
    

答案 2 :(得分:0)

不知道为什么第二个查询不会执行。如果没有看到数据库表的架构,并且没有发布服务器生成的错误消息的内容,那么实际上很难为您提供帮助。但与此同时,我高度建议你花点时间对SQL Injection的危险进行一些研究。

可能还希望确保在弄乱session_start()

之前致电session_id();

答案 3 :(得分:0)

mysql_error()返回空白的一个可能原因是同时打开了多个连接。我最近在将脚本转移到更新的服务器/ PHP版本时遇到了这个问题。尝试在您的调用中提供连接句柄,如下所示:mysql_error($ link)

这应该可以帮助您找到错误,并且知道这将有助于我们回答您的问题。

而且,尽管您表示您并不关心注射攻击 - 但您应该始终将所有来自用户/可疑来源的数据转发。至少在你放入数据库的每个$ _GET,$ _POST,$ _COOKIE,$ _REQUEST和$ _SERVER变量周围使用mysql_real_escape_string()。我向你介绍一下小鲍比表的故事......

This is what happens if you don't escape user input.

http://xkcd.com/327/

答案 4 :(得分:-1)

取消选中您的自动增量框进入数据库结构然后再次检查以保存自动增量结构,您的问题将得到解决。在做

时我遇到了这种错误
  

mysql_query($ query)或die(mysql_error());

错误

  

数据库更新失败:Engine无法更新自动处理。

似乎发生此错误,我省略了复制