【问题标题】:Run Multiple queries and one time一次运行多个查询
【发布时间】:2013-06-05 19:21:12
【问题描述】:

好的!我有一个作为现场拍卖一部分的脚本,但我的代码并非全部正常工作,而且我已经走到了尽头!下面的代码是我尝试过的两种方法,但都没有成功:

  <? if(isset($_GET['golive'])) { 

  $id = $_POST['id'];
  $totalamount = $_POST['amount'];
  $ordernumber = $_POST['ordernumber'];

  mysql_connect("localhost","DBusername","DBpassword") or  die(mysql_error()); 
  mysql_select_db("DBname") or die(mysql_error(header('Location: live_auction.php?ordermun=error'))); 

  mysql_query("INSERT INTO auction_bundle 
   (`purchaser_id`,`amount`,`order_number`,`date`) VALUES (".$id.",".$totalamount.",".$ordernumber.",NOW())
  UPDATE auction_products SET order_number=".$ordernumber." WHERE on_now=1;              
  UPDATE auction_products SET sold=1 WHERE on_now=1;
  UPDATE auction_products SET on_now=3 WHERE on_now=1"); 
  header('Location: live_auction.php?ordermun='.$ordernumber.'');

  } 
  ?>

我也试过

  <? if(isset($_GET['golive'])) { 

  $id = $_POST['id'];
  $totalamount = $_POST['amount'];
  $ordernumber = $_POST['ordernumber'];

  mysql_connect("localhost","DBusername","DBpassword") or  die(mysql_error()); 
  mysql_select_db("DBname") or die(mysql_error(header('Location: live_auction.php?ordermun=error'))); 

  mysql_query("INSERT INTO auction_bundle 
   (`purchaser_id`,`amount`,`order_number`,`date`) VALUES (".$id.",".$totalamount.",".$ordernumber.",NOW()");

  mysql_query("UPDATE auction_products SET order_number=".$ordernumber." WHERE on_now=1");              
  mysql_query("UPDATE auction_products SET sold=1 WHERE on_now=1");
  mysql_query("UPDATE auction_products SET on_now=3 WHERE on_now=1"); 
  header('Location: live_auction.php?ordermun='.$ordernumber.'');

  } 
  ?>

第二个能够更改auction_products 表,但仍不能INSERT 和其他查询。我错过了什么。在点击 golive 按钮时,我需要所有这四个发生。

【问题讨论】:

  • 您可能需要将查询中的值用单引号括起来。如果您在每个查询的末尾添加or die(mysql_error()),您可以确切地看到如果查询不工作时数据库返回的内容 - 您目前假设一切正常。
  • 您是否遇到任何错误。
  • 你应该停止使用mysql_*函数并切换到mysqli或PDO(你也可以使用Doctrine之类的工具进行抽象)。此外,您永远不应将用户输入直接传递到查询文本中。您正在乞求 sql 注入攻击。如果你切换到 mysqli 或 PDO,你可以做参数化查询来帮助解决 sql 注入问题。
  • die(mysql_error(header('Location: live_auction.php?ordermun=error'))) error_reporting(E_ALL); ini_set('display_errors', true);。
  • 你们是对的,我对 sql 注入攻击持开放态度,所以我会努力解决这个问题。我的主要问题是第一个 INSERT 查询不起作用......永远!即使单独使用它也不起作用,我不知道为什么。

标签: php mysql insert sql-update multi-query


【解决方案1】:

您的插入查询不起作用,因为您在末尾忘记了 )。

mysql_query("INSERT INTO auction_bundle 
   (`purchaser_id`,`amount`,`order_number`,`date`) VALUES (".$id.",".$totalamount.",".$ordernumber.",NOW()");

应该是:

mysql_query("INSERT INTO auction_bundle 
   (`purchaser_id`,`amount`,`order_number`,`date`) VALUES (".$id.",".$totalamount.",".$ordernumber.",NOW())");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 2021-07-19
    • 2018-12-17
    • 2011-10-07
    • 1970-01-01
    相关资源
    最近更新 更多