【问题标题】:MySQL UPDATE not workingMySQL 更新不起作用
【发布时间】:2011-11-04 12:08:23
【问题描述】:

我有一些代码可以更新名为job 的表,但是一旦执行该页面,它就不会更新该表。代码如下:

$item = isset($_POST['item']);
$ref = isset($_POST['ref']);

$con = mysql_connect("$host","$username","$password");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("$db_name", $con);

$sql="UPDATE job SET item = '$item' WHERE ref='$ref'";
if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
header("location:index.php");

我已经回显了$ref 变量,它就在那里,但如果我把它放在 WHERE 子句中,它将不起作用。

【问题讨论】:

  • 在执行查询之前$sql 的值是多少?另外,请注意 SQL 注入(在将它们放入查询之前,您可能希望转义 $item$ref)。
  • $ref 变量是什么类型的数据?
  • 您意识到 isset() 返回的是布尔值 true/false,而不是参数的实际值?
  • 请使用绑定变量以避免严重的SQL注入漏洞!
  • @james $ref 是一个字符串,我可以正确地回显 $ref 的值,但它不会在子句中接受它。

标签: php mysql database forms


【解决方案1】:
$ref = isset($_POST['ref']);

我已经回显了 $ref 变量,它就在那里

您没有分配$_POST['ref'] 的实际值,您只是分配它是否已设置。试试:

$ref = isset($_POST['ref']) ? mysql_real_escape_string($_POST['ref']) : NULL;

您可以通过阅读您创建的 SQL 字符串来检查您的查询:exit($sql)

另请参阅:What is SQL injection?

【讨论】:

    【解决方案2】:
    $item = isset($_POST['item']);
    $ref = isset($_POST['ref']);
    

    通过这两个语句,变量将具有 0 或 1 作为值...最好这样写..

    $item = (isset($_POST['item']) == 1 ? $_POST['item'] : '');
    $ref = (isset($_POST['ref']) == 1 ? $_POST['ref'] : '');
    
    if($item !='' && $ref !=''){
       // your update query
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-09
      • 1970-01-01
      • 1970-01-01
      • 2018-06-29
      • 2013-01-05
      • 1970-01-01
      相关资源
      最近更新 更多