PHP、mysql_query 不工作

问题描述 投票:0回答:5

我已经准备好拔掉我的头发了...

这非常有效:

$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);

这确实工作:

$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);

这两段代码位于一个表单中...如果表单中存在错误,则运行第一个 sql 查询以保存此时会话中的所有内容。如果没有错误,并且在发生其他一些事情之后,将运行第二个 sql 查询来更新那些先前保存的条目中的“已删除”状态。

我一直在修改一百万个替代语法,但我无法更新这些行。当我在 phpMyAdmin 中执行原始 SQL 时,它工作正常。这没有什么逻辑……或者也许我只是太累了。

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

-- 更新 --

我真的很感谢大家的关心,但让我解决一些问题:

  1. 是的,我的表中有一个名为“已删除”的列...您是认真的吗? :P
  2. 我当然使用 session_start();
  3. 是的,我正在检查 $sessionid 以确保它被调用。它始终在页面上回显,并且也在我执行的任何
    die
    语句中。
  4. 第一个查询负责创建第二个查询应该更新的行...所以数据就在那里。
  5. mysql_error()
    不会产生任何结果...根本没有错误。

再次感谢您的关心,但到目前为止,所有建议都已反复尝试。

enter image description here

php mysql phpmyadmin sql-update
5个回答
9
投票

使用

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

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

错误可能是多种原因之一,例如用户可能没有 DELETE 权限。如果您不使用

mysql_error()
,就无法知道发生了什么。

编辑 session_id 列中的数据看起来很短。检查

session_id
返回的字符串有多长,并检查数据库中的列长度。插入对于列来说太长的数据并不是错误,但它确实会裁剪数据。


3
投票

您是否尝试过检查...

  1. 调用脚本时
    $sessionid
    的值是多少
  2. mysql 返回什么错误(如果有)?

您可以通过将

die()
更改为...

来完成后者
mysql_query($query) or die (mysql_error());

0
投票

不知道为什么第二个查询不执行。如果没有看到数据库表的架构,也没有发布服务器生成的错误消息的内容,那么真的很难为您提供帮助。但与此同时,我强烈建议您花点时间研究一下SQL注入的危险。

可能还想确保在打扰

session_start()
 之前先打电话给 
session_id();


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/ )


-1
投票

在数据库结构中取消勾选你的自增框,然后再次勾选保存自增结构,你的问题就解决了。

我在做的时候遇到这样的错误

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

错误是:

数据库更新失败:引擎更新自动增量失败。

好像发生了这个错误,我忽略了复制

© www.soinside.com 2019 - 2024. All rights reserved.