【问题标题】:How to insert values using PHP MySQl UPDATE clause?如何使用 PHP MySQl UPDATE 子句插入值?
【发布时间】:2014-12-07 06:47:32
【问题描述】:

下面是 HTML 表单,它从用户那里获取输入主题和初学者(是,否)并将其插入数据库

<form action="coursesignup.php" method="post">
    Select Subject:<br>
     <select name="subject">
        <option value="select" selected>select</option>
        <option value="Database Management Systems">Database Management Systems</option>
        <option value="Advanced Microprocessors">Advanced Microprocessors</option>    </select><br><br>
        Are you a Beginner:<br>
        <select name="beginner">
        <option value="select" selected>select</option>
        <option value="yes">yes</option>
        <option value="no">No</option></select><br><br>

        <input type="submit" value="Submit" /></form>

Form 将数据提交到以下 php 文件中。 但是,它不是在相应的用户 ID 处插入值,而是将它们放在表的末尾

<?php

session_start();

if($_SESSION["username"])
$_POST["username"]=$_SESSION["username"];
$user=$_POST["username"];

// Check connection
$con=mysqli_connect("localhost","root","","elearning");

if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

// escape variables for security

$subject = mysqli_real_escape_string($con, $_POST['subject']);
$beginner= mysqli_real_escape_string($con, $_POST['beginner']);

$sql=" UPDATE student_info SET subject=$subject AND beginner=$beginner 
       WHERE username=$user " ;



if (!mysqli_query($con,$sql)) {
  die('Error: ' . mysqli_error($con));
}
echo "Successfuly entered";


mysqli_close($con);
?>

它给出以下错误:

错误: Erreur de syntaxe près de 'Management Systems AND ;beginner=yes WHERE username=gk4316' à la ligne 1

【问题讨论】:

  • 正如错误消息所说,在 AND in 之后的查询中似乎有一个额外的(不必要的)分号:Management Systems AND ; begin=yes WHERE username= gk4316 ,您还需要将用户名值用引号括起来
  • @Ormoz 这就是 SQL 产生的错误,而不是查询本身。 OP 的 SQL 是法语的,我可以理解这种语言。

标签: php mysql sql-update


【解决方案1】:

删除 AND 并将其替换为 sql 更新语句中的逗号。

$sql="更新学生信息集主题='$subject',初学者='$beginner' WHERE 用户名='$user' " ;

【讨论】:

    【解决方案2】:

    您的查询有一些问题。

    您需要在变量周围使用引号,因为您将它们作为字符串传递。

    另一个问题是,您需要删除 AND 并改用逗号。

    $sql=" UPDATE student_info SET subject='$subject', beginner='$beginner' 
           WHERE username='$user' " ;
    

    这就是您收到错误消息的原因。


    AND 是您希望在 WHERE 子句中使用多项检查的地方。

    例如:

    `WHERE column_1 = 'something' AND column_2 = 'something else'
    

    旁注:

    您当前的代码对SQL injection 开放。使用prepared statementsPDO with prepared statements它们更安全


    脚注:

    我发现的其他东西是if($_SESSION["username"])。你最好使用isset() if(isset($_SESSION["username"])) 并使用适当的支撑:

    if(isset($_SESSION["username"])){
      $_POST["username"]=$_SESSION["username"];
      $user=$_POST["username"];
    }
    

    这只是很好的编码习惯。


    快速教程:

    以下是使用 mysqli 和预准备语句的 UPDATE 示例:

    旁注:i 代表integers 代表string

    $con = new mysqli('host','user','password','database');
    $stmt = $con->prepare("UPDATE `table` SET `title`=?, `description`=?, `price`=?, `location`=?, `email`=?, `date`=? WHERE `id`=?");
    $stmt->bind_param("ssisssi", $title_string, $description_string, $price_int, $location_string, $email_string, $date_string, $id_int);
    stmt->execute();  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 2019-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-30
      相关资源
      最近更新 更多