当我通过输入文本传递值时,为什么这段代码不起作用?

时间:2016-07-23 20:59:18

标签: php

当我通过输入文本传递值时,我不知道为什么这段代码不起作用?如果我违反规则那么它是什么,格式是否正确。

<?php        

$id1 = $_POST["id1"];  
           $name = $_POST["name"];   
           $update = $_POST["update"];   
             echo $id1;    //working
             echo $name;    //working
             echo $update;    //working



  mysqli_query($conn , 'update insert1 set  '.$name.' = '.$update.'
    where id-1 = '.$id1.'' ); //not working
        // but if I manually use this as follows it works correctly
         mysqli_query($conn , 'update insert1 set  name = "new" where id-1 = '1'' );

  ?>

3 个答案:

答案 0 :(得分:1)

我用单引号包装$update(注意我翻了引号)并将id1更改为$id1

mysqli_query($conn , "update insert1 set  ".$name." = '".$update."'
where id-1 = ".$id1 );

如果id-1是数据库中的字符串列类型,那么我用单引号包装$id1。像这样:

mysqli_query($conn , "update insert1 set  ".$name." = '".$update."'
where id-1 = '".$id1."'" );

注意:

  • 我仔细检查id-1是否符合WHERE条件,因为它会检查该列中的值是否为2而不是1. WHERE id - 1 = 1相当于WHERE id = 2但更让读者感到困惑(感谢FirstOne指出这一点)。
  • 正如另一个答案中所提到的,您的代码很容易被SQL注入,我会检查一下:https://stackoverflow.com/a/16282269/4283725

答案 1 :(得分:0)

首先,请正确缩进您的代码。

然后学习(或至少尝试理解)字符串连接的工作原理。在PHP中,您可以对字符串使用单引号或双引号。

我每次向同事重复的是尝试(如果可能的话)将字符串包装成关于字符串可能(可能)包含的正确类型的引用。

如果您有机会在字符串中(或连接到其中一个变量中)使用单引号,请将其包装为双精度数。

如果您有机会在字符串中(或连接到其中一个变量中)使用双引号,请将其包装成单个。

这看起来很明显,但是如果你每次操纵字符串时都记住这一点,那么你就可以很好地连接字符串和变量了。

另外,您传递完整的原始查询作为参数的方式也不是很易读。 输入一个单独的变量并尝试这样:

<?php        
$id1 = $_POST["id1"];  
$name = $_POST["name"];   
$update = $_POST["update"];   

$query = '
    UPDATE insert1
    SET ' . $name . ' = "' . $update . '"
    WHERE id-1 = ' . $id1 . '
';

mysqli_query($conn, $query);
?>

您会注意到$name未被引号括起来,因为它是字段名称而不是值。

同样$id1没有用引号括起来,因为它是一个整数值而不是字符串值。 但是,如果由于某种原因,id-1字段或您的insert1表将数字存储为字符串,那么您将要用双引号括起来。

答案 2 :(得分:-1)

您似乎没有在SQL语句中声明变量。

添加美元符号($)来声明。

$id1 = $_POST["id1"];  
               $name = $_POST["name"];   
               $update = $_POST["update"];   
                 echo $id1;    //working
                 echo $name;    //working
                 echo $update;    //working



      mysqli_query($conn , 'update insert1 set  '.$name.' = '.$update.'
        where id-1 = '.$id1.'' ); //not working
            //but  if i manually use this as folwing it works correctly    mysqli_query($conn , 'update insert1 set  name = "new" where id-1 =
        '1'' );

  ?>

此外,您的代码对SQL injection开放。