【问题标题】:How to update specific table row in mysql table using php [duplicate]如何使用php更新mysql表中的特定表行[重复]
【发布时间】:2016-09-26 08:57:31
【问题描述】:

我是 php 的初学者,我正在尝试更新特定行但不起作用。我需要你的帮助: update.php 目录。 '/db_connect.php'; // 连接到数据库 $db = new DB_CONNECT();

    if (isset($_POST['id'])) {

$id = $_POST["id"];
$location = $_POST["location"];
  $sql=mysql_query("UPDATE citizenalert set location={'$location'} WHERE id ={'$id'}");
}

  ?> 

db_config.php

  <?php

   define('DB_USER', "root"); // db user
   define('DB_PASSWORD', ""); // db password (mention your db password here)
     define('DB_DATABASE', "ikirenga"); // database name
      define('DB_SERVER', "localhost"); // db server
     ?>

db_connect.php

           <?php

  class DB_CONNECT {

// constructor
function __construct() {
    // connecting to database
    $this->connect();
}

// destructor
function __destruct() {
    // closing db connection
    $this->close();
}

/**
 * Function to connect with database
 */
function connect() {
    // import database connection variables
    require_once __DIR__ . '/db_config.php';

    // Connecting to mysql database
    $con = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD) or die(mysql_error());


    // Selecing database
    $db = mysql_select_db(DB_DATABASE) or die(mysql_error()) or die(mysql_error());

    // returing connection cursor
    return $con;
}

/**
 * Function to close db connection
 */
function close() {
    // closing db connection
    mysql_close();
}
    }
   ?>

request_update.php

               <!doctype html>

                <html lang="en">

                   <body>
                  <form name="updates" method="post" action="update.php" > 
                   <label>User location</label> <input id="location"  type="text" name="location" > <br><br>
                     <input type="submit" name="submit" value="Submit" /> 
                     </form>  
                     </body>
                     </html>

【问题讨论】:

  • 你遇到了什么错误?
  • 检查您的连接列表,您的代码已为 SQL 注入打开。
  • 令我惊讶的是,人们至今仍在使用 mysql_ 函数。
  • 难怪。 60% 的 stackoverflow 显示它
  • @devpro 可悲的是他们可能是商业网站stackoverflow.com/questions/38297105/…

标签: php mysql


【解决方案1】:

请使用以下语法

<?php
require_once __DIR__ . '/db_connect.php';
$db = new DB_CONNECT();

if (isset($_POST['id'])) {

$id = $_POST["id"];
$location = $_POST["location"];
$sql = mysql_query(" UPDATE citizenalert set location = " . $location . "   WHERE id = " . $id . ");
  }

谢谢。

【讨论】:

  • 谁知道呢,$location 是字符串还是整数。
  • 这里的sql注入
  • $location 是一个字符串
  • @NiragireSam:你检查过其他答案了吗??
  • 是的,我正在检查它,我没有发现任何变化
【解决方案2】:

如下更改您的 SQL 查询

$sql=mysql_query("UPDATE citizenalert set location='{$location}' WHERE id = '{$id}'");

【讨论】:

  • 这里的sql注入
【解决方案3】:

如果我像这样测试你的代码:

<?php 
$id = 1;
$location = "test";
echo $sql="UPDATE citizenalert set location={'$location'} WHERE id ={'$id'}";
?>

它给出了这个查询:

UPDATE citizenalert set location={'test'} WHERE id ={'1'} 

请在此处检查,这两个值都有问题。

问题:

您在引号之外使用{}。您需要在单引号内使用它。

修改后的查询具有相同的示例:

echo $sql="UPDATE citizenalert set location='{$location}' WHERE id ='{$id}'";

结果:

UPDATE citizenalert set location='test' WHERE id ='1'

旁注:

  • 使用mysqli_*PDO,因为mysql_*PHP 7 中已被弃用和关闭。
  • 您的代码对 SQL 注入开放,您必须使用 SQL 注入进行保护,或者只需使用 Prepared Statement

Prepared Statement 的其他参考: php mysql bind-param, how to prepare statement for update query

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    • 2014-08-13
    相关资源
    最近更新 更多