为了账号安全,请及时绑定邮箱和手机立即绑定

两个mysqli查询

/ 猿问

两个mysqli查询

PHP
蝴蝶不菲 2019-07-22 10:06:19

两个mysqli查询

有可能有像这样的两个mysqli_查询吗?

mysqli_query($dblink, "INSERT INTO images (project_id, user_id, image_name, date_created, link_to_file, link_to_thumbnail, given_name) VALUES ('$project_id', '$user_id', '$image_name', '$date_created', '$link_to_file', '$thumbnail', '$ImageName')") or die(mysql_error());
                          mysqli_query($dblink, "INSERT INTO images_history (project_id, user_id, image_name, date_created, link_to_file, link_to_thumbnail, given_name, day, month, year) VALUES ('$project_id', '$user_id', '$image_name', '$date_created', '$link_to_file', '$thumbnail', '$ImageName', '$day', '$month', '$year')") or die(mysql_error());

基本上,我想更新DB中的两个表。有更好的方法吗?


查看完整描述

2 回答

?
富国沪深

这是有可能的mysqli_multiquery().

例子:

<?php

$mysqli = new mysqli($host, $user, $password, $database);// create string of queries separated by ;$query  = "INSERT INTO images (project_id, user_id, image_name, date_created, link_to_file, link_to_thumbnail, given_name) VALUES ('$project_id', '$user_id', '$image_name', '$date_created', '$link_to_file', '$thumbnail', '$ImageName');";$query .= "INSERT INTO images_history (project_id, user_id, image_name, date_created, link_to_file, link_to_thumbnail, given_name, day, month, year) VALUES ('$project_id', '$user_id', '$image_name', '$date_created', '$link_to_file', '$thumbnail', '$ImageName', '$day', '$month', '$year');";// execute query - $result is false if the first query failed$result = mysqli_multi_query($mysqli, $query);if ($result) {
    do {
        // grab the result of the next query
        if (($result = mysqli_store_result($mysqli)) === false && mysqli_error($mysqli) != '') {
            echo "Query failed: " . mysqli_error($mysqli);
        }
    } while (mysqli_more_results($mysqli) && mysqli_next_result($mysqli)); // while there are more results} else {
    echo "First query failed..." . mysqli_error($mysqli);}

关键是你使用mysqli_multi_query如果您想在一个调用中执行多个查询。出于安全原因,mysqli_query不会执行多个查询以防止SQL注入。

也要记住mysqli_store_result..它回来了FALSE如果查询没有结果集(其中INSERT),所以您还必须检查mysqli_error以确保返回一个空字符串,即INSERT是成功的。

见:
mysqli多查询
mysqli多结果
mysqli下一个结果
mysqli存储结果


查看完整回答
反对 回复 2019-07-22
?
慕的地8271018

一劳永逸!使用此函数可以获得脚本中任意位置的无限数量查询的结果。

职能:

您只需将多个查询的输出传递给函数,它就会返回在每个查询中找到的所有结果和错误。

  function loop_multi($result){
    //use the global variable $conn in this function
    global $conn;
    //an array to store results and return at the end
    $returned = array("result"=>array(),"error"=>array());
    //if first query doesn't return errors
      if ($result){
        //store results of first query in the $returned array
        $returned["result"][0] = mysqli_store_result($conn);
        //set a variable to loop and assign following results to the $returned array properly
        $count = 0;
        // start doing and keep trying until the while condition below is not met
        do {
            //increase the loop count by one
            $count++;
            //go to the next result
            mysqli_next_result($conn);
            //get mysqli stored result for this query
            $result = mysqli_store_result($conn);
            //if this query in the loop doesn't return errors
            if($result){
              //store results of this query in the $returned array
              $returned["result"][$count] = $result;
            //if this query in the loop returns errors
            }else{
              //store errors of this query in the $returned array
              $returned["error"][$count] = mysqli_error($conn);
            }
        }
        // stop if this is false
        while (mysqli_more_results($conn));
      }else{
        //if first query returns errors
        $returned["error"][0] = mysqli_error($conn);
      }
    //return the $returned array
    return $returned;
  }

用法:

$query  = "INSERT INTO table1 (attribute1) VALUES ('value1');";$query .= "INSERT INTO table2 (attribute2) VALUES ('value2');";$query .= "SELECT * FROM table3;";//execute query$result = mysqli_multi_query($conn, $query);//pass $result to the loop_multi function$output = loop_multi($result);

输出量

$Output包括由查询排序的两个数组“结果”和“错误”。例如,如果您需要检查在执行第三个查询并获取其结果时是否发生了任何错误,您可以这样做:

if(isset($output['error'][2]) && $output['error'][2] !== ""){
  echo $output['error'][2];}else{
  while($row = $output['result'][2]->fetch_assoc()) {
    print_r($row);
  }}


查看完整回答
反对 回复 2019-07-22

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信