【问题标题】:UPDATE MySQL and date time local field更新 MySQL 和日期时间本地字段
【发布时间】:2014-01-24 02:18:40
【问题描述】:

好的,我有一个插入语句运行良好,一个删除语句正在运行。 然而 UPDATE 已经一天多没有出现了,也看不到问题,我认为唯一可能是 MySQL 中的日期时间本地字段,但它适用于插入。

表格

$Band_id = (int)$_GET['id'];    
  $result = mysql_query("SELECT * FROM bands where Band_id ='$Band_id'");
  $row = mysql_fetch_array($result);
  ?>
  <form method="post" action="ammenddetails.php">
  <input type="hidden" name="id" value="<? echo "$row[Band_id]"?>">

    <tr><td>Band Name</td></br>
    <td><input type="text" name="Name" size="20" value="<? echo "$row[Name]"?>"></td></tr></br>

    <tr><tr><td>Show Name</td></br>
    <td><input type="text" name="show" size="20" value="<? echo "$row[show]"?>"></td></tr></br>

    <tr><td>Venue</td></br>
    <td><input type="text" name="Venue" size="20" value="<? echo "$row[Venue]"?>"></td></tr></br>

    <tr><td>Category</td></br>
    <td><input type="text" name="Category" size="20" value="<? echo "$row[Category]"?>"></td></tr></br>

    <tr><td>Date and Time</td></br>
    <td><input type="datetime-local" name="time" size="20" value="<? echo "$row[time]"?>"></td></tr></br>

    <tr><td>Price</td></br>
    <td><input type="number" name="price" size="20" value="<? echo "$row[price]"?>"></td></tr></br>

    <tr><td>Stock</td></br>
    <td><input type="number" name="Stock" size="20" value="<? echo "$row[Stock]"?>"></td></tr></br>

    <tr><td>Infomation</td></br>
    <?php echo "<td><textarea name= 'infomation' cols=\"50\" rows=\"8\" >" .$row['infomation']. "</textarea></td>";?></tr></br>

    <tr><input type="submit"name="submit value" value="Update"></td>
    </tr>
  </form>

ammenddetails.php

 <?php
require 'core/init.php';
$Name = mysql_real_escape_string($_POST["Name"]);
$show = mysql_real_escape_string($_POST["show"]);
$Venue = mysql_real_escape_string($_POST["Venue"]);
$Category = mysql_real_escape_string($_POST["Category"]);
$price = mysql_real_escape_string($_POST["price"]);
$Stock = mysql_real_escape_string($_POST["Stock"]);
$time = mysql_real_escape_string($_POST["time"]);
$infomation = mysql_real_escape_string($_POST["infomation"]);
$Band_id = (int)$_POST['id'];

    $result = mysql_query("UPDATE `bands`
              SET `Name`=`$Name`, 
                  `show`=`$show`,  
                  `Venue`=`$Venue`,
                  `Category`=`$Category`,
                  `price`=`$price`, 
                  `Stock`=`$Stock`, 
                  `time`=`$time`,
                  `infomation`=`$infomation`
              WHERE 
              `Band_id`=`$Band_id`");

echo "UPDATE `bands`
              SET `Name`=`$Name`, 
                  `show`=`$show`,  
                  `Venue`=`$Venue`,
                  `Category`=`$Category`,
                  `price`=`$price`, 
                  `Stock`=`$Stock`, 
                  `time`=`$time`,
                  `infomation`=`$infomation`
              WHERE 
              `Band_id`=`$Band_id`"
              // header("location:admin.php");
?>

查询的回显显示为:

UPDATE `bands` SET `Name`=`Coldplay`, `show`=`Time of you life`, `Venue`=`London Wembley `, `Category`=`Rock`, `price`=`2`, `Stock`=`20`, `time`=`2014-01-23T01:59`, `infomation`=`info here test` WHERE `Band_id`=`3`

已经尝试过建议查询现在输出:

 UPDATE `bands` SET SET `Name`='Killers', `show`='Big Time High', `Venue`='London Apolo', `Category`='Rock', `price`='45', `Stock`='75', `time`='', `infomation`='BLOB values are trea' WHERE `Band_id`='1'

所以查询得到了正确的数据,只是没有更新 bd

【问题讨论】:

  • 使用反引号转义表名和列名。使用引号限制字符串。
  • 感谢您提供的信息,我将尝试实施。
  • mysql_query 是一个过时的接口,不应在新应用程序中使用,并将在未来的 PHP 版本中删除。像PDO is not hard to learn 这样的现代替代品。如果您是 PHP 新手,PHP The Right Way 之类的指南可以提供帮助。虽然你已经小心翼翼地在这里正确地逃脱了事情,但你离灾难只有一个错误。占位符值提供了额外的安全层。
  • 太棒了,前几天我订购了一本关于现代 PDO 博士的书,正在等待亚马逊发货。

标签: php mysql sql-update


【解决方案1】:

这是你的问题。

SET `Name`=`$Name`, 

你使用`来定义字段,但是对于变量你需要使用'

例如

SET `Name`='$Name',

....

更好的方法是:

SET `Name`='{$Name}',

....

试试看,然后告诉我! :)

【讨论】:

  • 花括号并不是“更好”。他们只是使用字符串插值来固化危险的 SQL 组合技术。
  • @Vick 我会尝试第二个选项,如果它有效,请告诉您。
  • 只有当相关变量中包含 $_POST['value'] 之类的内容时才需要花括号,但这些内容应该永远首先出现在您的查询中。您观察到使用了错误的引号是对的。在 MySQL 中,'" 可用于值,` 仅用于数据库、表和列名称。
猜你喜欢
  • 2017-08-03
  • 1970-01-01
  • 2019-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-09
  • 2021-08-21
相关资源
最近更新 更多