MySQL更新查询不起作用

时间:2011-08-16 20:03:50

标签: php mysql

我有以下字段的mysql表

id(自动递增)

标题,姓名,年龄,机构,IOD

标题,名称,年龄,机构等字段在表单结构(html页面)中输入,单击提交按钮存储在DB(mysql)中

iod是字段是这样的123 / id(除了相同的id字段,但前面带有'123 /'前缀)

现在当用户输入标题,名称,年龄,机构时,这些需要存储在DB中,包括id和iod。

现在执行以上内容我写了以下字段标题,名称,年龄,机构和ID已成功存储,但不存储碘。

你能告诉我我在这里犯的错误吗?

我为代码编写了以下语法(相同代码的一部分)

if ($_POST['title'] != '')
{
$value = $_POST['title'];
$value1 = $_POST['name']; 
$value2 = $_POST['age'];  
$value5 = $_POST['institution']; 

$sql = "INSERT INTO parentid(title,name,age,institution) VALUES('$value','$value1','$value2','$value5')"  ;

}
$sql1="SELECT * FROM parentid ORDER BY id DESC LIMIT 1";
$value6=$row['id'];
$value4= '123/' . $row['id'] ;
$sql2="UPDATE parentid SET iod='$value4' WHERE id = '$value6' ";

4 个答案:

答案 0 :(得分:3)

问题是你没有执行你的查询,你只是把查询放在一个字符串中,但是你没有做任何事情。

对于第二个查询(简单示例代码):

$sql1="SELECT * FROM parentid ORDER BY id DESC LIMIT 1";
$result = mysql_query($sql1);
if ($row = mysql_fetch_assoc($result))
{
  $value6=$row['id'];
  // etc., error handling not added
}

答案 1 :(得分:1)

您没有执行任何查询?此外,你应该逃避参数......

if ( !empty( $_POST['title'] ) || !empty( $_POST['calc_url'] ) ) {

    $value = mysql_real_escape_string( $_POST['title'] );
    $value1 = mysql_real_escape_string( $_POST['name'] ); 
    $value2 = mysql_real_escape_string( $_POST['age'] );  
    $value5 = mysql_real_escape_string( $_POST['institution'] ); 

    $sql = "INSERT INTO parentid
            (title,name,age,institution) 
        VALUES ('$value','$value1','$value2','$value5')"  ;

    mysql_query( $sql ) or die( mysql_error());
}

此外,您不需要第二次选择...使用mysql_insert_id功能获取ID。

$value6 = mysql_insert_id();
$value4= '123/' . $value6 ;

然后更新:

$sql2="UPDATE parentid SET iod='$value4' WHERE id = '$value6' ";
mysql_query( $sql2 );

我鼓励你使用PDOmysqli但是......

答案 2 :(得分:1)

除非您在复制/粘贴问题时错过了大量代码,否则会出现一些问题。

首先,您实际上并没有执行查询(我假设您实际上是在某处连接到数据库)。将字符串分配给$sql后,您可以执行查询:

$result = mysql_query($sql);

其次,除非您从查询返回的数据集中获取数据,否则$row将不包含任何内容:

$row = mysql_fetch_assoc($result);

第三,您的if语句不包含UPDATE查询,因此无论$_POST['title']是否为空,都将执行。

正如其他人所提到的,您的查询对SQL注入攻击持开放态度。至少您需要在任何输入周围使用mysql_real_escape_string

最后,您可以使用mysql_insert_id获取最新插入内容的ID,而不是再次阅读。

这是尝试重做代码的一些尝试(请注意,这是未经测试的,可能会更好):

if($_POST['title'] != '') {
    //Connect to database here (or somewhere else if you already are)

    $value = mysql_real_escape_string($_POST['title']);
    $value1 = mysql_real_escape_string($_POST['name']); 
    $value2 = mysql_real_escape_string($_POST['age']);  
    $value5 = mysql_real_escape_string($_POST['institution']); 

    $sql = "INSERT INTO parentid(title,name,age,institution) VALUES('$value','$value1','$value2','$value5')";
    $result = mysql_query($sql);

    if($result) {
        $value6 = mysql_insert_id($result);
        $value4 = '123/' . $value6;
        $sql2 = "UPDATE parentid SET iod='$value4' WHERE id = '$value6'";
        mysql_query($sql2);
    }
}

答案 3 :(得分:0)

我的猜测是你有一个需要逃避的特殊角色。 我假设您已经知道应该在将它们插入数据库之前将所有这些字符串转义。

在PHP中,您有一个mysql_real_escape_string函数,您应该使用该函数来转义每个值。