【问题标题】:running two queries in php [duplicate]在php中运行两个查询[重复]
【发布时间】:2018-11-11 13:22:00
【问题描述】:

我需要帮助来尝试使以下 php 代码正常工作。代码在Users 表上搜索用户。在进行搜索时,我想将搜索的时间戳插入另一个名为 scan 的表中。这样做的目的是创建一个带有表格扫描的报告,就像我希望每次搜索用户时看到的那样。

但是,除了第二个查询之外,一切正常。谁能帮我确定下面的 php 代码有什么问题以及如何使它工作?同样,我想让第二个查询 (INSERT INTO) 工作并将搜索到的数据插入到scan 表中。

 <?php
    // initalize the variables 
    $osha      = "";
    $firstname = "";
    $lastname  = "";
    $company   = "";
    $trade     = "";

    // php code to search data in mysql database and set it in input text
    if(isset($_POST['search']))
    {
        // connect to mysql
        $dbc = mysqli_connect("127.0.0.1", "root", "root","demodb");

        // id to search
        $user_id = mysqli_real_escape_string($dbc, $_POST['user_id']);

        $query = "SELECT * FROM Users WHERE user_id = '$user_id' LIMIT 1";
        $rs    = mysqli_query($dbc, $query);
        if (mysqli_num_rows($rs) == 1)
        {
          $row       = mysqli_fetch_array($rs);
          $osha      = $row['osha'];
          $firstname = $row['firstname'];
          $lastname  = $row['lastname'];
          $company   = $row['company'];
          $trade     = $row['trade'];

          $query     = "INSERT INTO scan (user_id, osha, firstname, lastname, company, trade, email, picture) VALUES (" .
            "'" . $user_id . "', '" .
            "'" . mysqli_real_escape_string($dbc, $osha     ) . "', '" .
            "'" . mysqli_real_escape_string($dbc, $firstname) . "', '" .
            "'" . mysqli_real_escape_string($dbc, $lastname ) . "', '" .
            "'" . mysqli_real_escape_string($dbc, $company  ) . "', '" .
            "'" . mysqli_real_escape_string($dbc, $trade    ) . "')";
          mysqli_query($dbc, $query);
        }
        else
        {
          echo "Undefined ID";
        }
    }    
    ?>

    <!DOCTYPE html>

    <html>

        <head>

            <title> PHP FIND DATA </title>

            <meta charset="UTF-8">

            <meta name="viewport" content="width=device-width, initial-scale=1.0">

        </head>

        <body>

        <form action="barcode.php" method="post">

        Id:<input type="text" name="user_id"><br><br>

        Osha #:<input type="text" name="osha" value="<?= htmlspecialchars($osha) ?>"><br><br>

            First Name:<input type="text" name="firstname" value="<?= htmlspecialchars($firstname) ?>"><br>
    <br>

            Last Name:<input type="text" name="lastname" value="<?= htmlspecialchars($lastname) ?>"><br><br>

        Company:<input type="text" name="company" value="<?= htmlspecialchars($company) ?>"><br><br>

        Trade:<input type="text" name="trade" value="<?= htmlspecialchars($trade) ?>"><br><br>

        <input type="submit" name="search" value="Find">

               </form>

        </body>

    </html>

添加表定义

Users

| Users | CREATE TABLE `Users` (
  `user_id` int(6) unsigned NOT NULL AUTO_INCREMENT,
  `osha` int(50) DEFAULT NULL,
  `firstname` varchar(30) NOT NULL,
  `lastname` varchar(30) NOT NULL,
  `company` varchar(50) DEFAULT NULL,
  `trade` varchar(50) DEFAULT NULL,
  `email` varchar(50) DEFAULT NULL,
  `picture` varchar(50) DEFAULT NULL,
  `reg_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=98819 DEFAULT CHARSET=latin1 |

scan

| scan  | CREATE TABLE `scan` (
  `user_id` int(6) unsigned NOT NULL DEFAULT '0',
  `osha` int(50) DEFAULT NULL,
  `firstname` varchar(30) NOT NULL,
  `lastname` varchar(30) NOT NULL,
  `company` varchar(50) DEFAULT NULL,
  `trade` varchar(50) DEFAULT NULL,
  `email` varchar(50) DEFAULT NULL,
  `picture` varchar(50) DEFAULT NULL,
  `reg_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

【问题讨论】:

  • 仅供参考,如果您所做的只是如果找到则搜索并插入,那么您可以在单个插入语句中执行此操作。见这里-stackoverflow.com/q/5391344/296555。前任。 INSERT INTO scan (user_id, ...) SELECT user_id... FROM Users WHERE user_id = :userId。此外,您对 SQL 注入攻击非常开放。查找参数化查询。参数化查询还将帮助您避免那些使调试非常困难的不必要的引号。这是 PDO 的不错参考 - phpdelusions.net/pdo
  • 见@Alexandr Khomutetsky 的回答。您正在尝试插入一个有 8 列但只传入 6 个值的表。可能还有其他问题。请使用错误报告来找出这些类型的问题 - stackoverflow.com/q/22662488/296555

标签: php html


【解决方案1】:

您插入的数据少于声明要插入的字段。 “电子邮件”和“图片”字段没有值。至少这可能是您的问题的原因。

【讨论】:

  • 我确实试过这个。但是,这似乎是引号过多和插入数据较少的组合。感谢您的帮助。
【解决方案2】:

您的查询结果为值上的 2 个单引号。

试试这个。

$query     = "INSERT INTO scan (user_id, osha, firstname, lastname, company, trade, email, picture) VALUES (" .
        "'" . $user_id . "', " .
        "'" . mysqli_real_escape_string($dbc, $osha     ) . "', " .
        "'" . mysqli_real_escape_string($dbc, $firstname) . "', " .
        "'" . mysqli_real_escape_string($dbc, $lastname ) . "', " .
        "'" . mysqli_real_escape_string($dbc, $company  ) . "', " .
        "'" . mysqli_real_escape_string($dbc, $trade    ) . "')";
      mysqli_query($dbc, $query);

我还建议使用 mysql 参数作为良好做法

【讨论】:

    【解决方案3】:

    未经测试,但在查看此内容时,您在每个 mysqli_real_escape_string 行的末尾有很多额外的、不需要的引号:

     <?php
        // initalize the variables 
        $osha      = "";
        $firstname = "";
        $lastname  = "";
        $company   = "";
        $trade     = "";
    
        // php code to search data in mysql database and set it in input text
        if(isset($_POST['search']))
        {
            // connect to mysql
            $dbc = mysqli_connect("127.0.0.1", "root", "root","demodb");
    
            // id to search
            $user_id = mysqli_real_escape_string($dbc, $_POST['user_id']);
    
            $query = "SELECT * FROM Users WHERE user_id = '$user_id' LIMIT 1";
            $rs    = mysqli_query($dbc, $query);
            if (mysqli_num_rows($rs) == 1)
            {
              $row       = mysqli_fetch_array($rs);
              $osha      = $row['osha'];
              $firstname = $row['firstname'];
              $lastname  = $row['lastname'];
              $company   = $row['company'];
              $trade     = $row['trade'];
    
              $query     = "INSERT INTO scan (user_id, osha, firstname, lastname, company, trade, email, picture) VALUES (" .
                "'" . $user_id . "'," .
                "'" . mysqli_real_escape_string($dbc, $osha     ) . "', " .
                "'" . mysqli_real_escape_string($dbc, $firstname) . "', " .
                "'" . mysqli_real_escape_string($dbc, $lastname ) . "', " .
                "'" . mysqli_real_escape_string($dbc, $company  ) . "', " .
                "'" . mysqli_real_escape_string($dbc, $trade    ) . "')";
              mysqli_query($dbc, $query);
            }
            else
            {
              echo "Undefined ID";
            }
        }    
        ?>
    

    【讨论】:

      猜你喜欢
      • 2012-10-15
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多