使用PHP

时间:2017-11-22 13:51:28

标签: php

我有一个简单的脚本应该在用户登录等于登录的列中更新变量。

<?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',它可以正常工作。有什么建议吗?

4 个答案:

答案 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文件中。