当我通过输入文本传递值时,我不知道为什么这段代码不起作用?如果我违反规则那么它是什么,格式是否正确。
<?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'' );
?>
答案 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指出这一点)。答案 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开放。