我有一个简单的脚本应该在用户登录等于登录的列中更新变量。
<?PHP
$login = $_POST['login'];
$column= $_POST['column'];
$number = $_POST['number'];
$link = mysqli_connect("localhost", "id3008526_root", "12345", "id3008526_test");
$ins = mysqli_query($link, "UPDATE test_table SET '$column' = '$number' WHERE log = '$login'");
if ($ins)
die ("TRUE");
else
die ("FALSE");
?>
但它不起作用。它给了我 - 假。我的一个列名称是w1,如果我用w1替换代码中的'$ column',它可以正常工作。有什么建议吗?
答案 0 :(得分:4)
只需删除引号:'$column' =
应为$column =
您的代码对SQL注入是开放的,使用预准备语句。
答案 1 :(得分:1)
更改此"UPDATE test_table SET '$column' = '$number' WHERE log = '$login'"
到此"UPDATE test_table SET '".$column."' = ".$number." WHERE log = '".$login."'"
答案 2 :(得分:0)
您的错误可能与将$列设置为带有单引号的字符串有关吗?因为它返回false,所以它表明你有某种类型的MySQL错误。
要找出错误消息是什么,在你的块上,而不是死于“FALSE”消息,尝试使用mysqli_error($ link) - 这应该会给你错误消息
答案 3 :(得分:0)
如果删除$列周围的引号不起作用,则可以尝试使用PDO方法。这是片段:
function insertUser($column, $number, $login) {
try
{
$connect = getConnection(); //db connection
$sql = "UPDATE test_table SET $column = '$number' WHERE log = '$login'";
$connect->exec($sql);
$connect = null;
} catch (Exception $ex) {
echo "EXCEPTION : Insert failed : " . $ex->getMessage();
}
}
function getConnection() {
$servername = "localhost";
$dbname = "my_db";
$username = "root";
$password = "12345";
try {
$connection = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (Exception $ex) {
echo "EXCEPTION: Connection failed : " . $ex->getMessage();
}
return $connection;
}
关于$ number,我不确定$ number的数据类型是否需要引号,因此可以使用或不使用引号进行实验,以查看哪一个有效。
getConnection()函数位于单独的PHP文件中,它将包含在任何调用数据库连接的PHP文件中。