使用从mysqli查询中检索的数据在php中执行另一个mysqli查询

时间:2016-03-31 11:00:22

标签: php loops mysqli

我在一个数据库User_info和另一个Product_info中有两个表。我想要做的是,如果我获得了User_id,那么我将检查表Product_id中与User_id相对应的User_info。然后,我将使用我检索到的Product_id来查找表Product_name中的Product_info

**Table-User_info**
User_id    Product_id

 2            P1
 3            P4
 2            P3
 45           P7


**Table-Product_info**
Product_name    Product_id

 A               P1
 B               P4
 C               P3
 D               P7

例如,如果给我User_id 2,那么我想显示AC

以下是我写的代码:

    $mysqli=new mysqli("127.0.0.1","root","","bargad");//Connecting to the database
                if($mysqli->connect_error)
                {
                    echo "Couldnt connect to server";

                }
                else
                {
                    $query="SELECT Product_id from User_info WHERE User_id=?";
                    $statement=$mysqli->prepare($query);
                    //binding parameters
                    $statement->bind_param('s',$u_id);//u_id is given
                    $statement->execute();
                    $statement->bind_result($pdt_id);
                    while($statement->fetch())
                    {

                        $query2="SELECT Product_name from Product_info WHERE Product_id=?";
                        $statement_2=$mysqli->prepare($query2);
                        $statement_2->bind_param('s',$pdt_id);
                        $statement_2->execute();
                        $statement_2->bind_result($pdt_name);
                        while($statement_2->fetch())
                        {
                            echo $Product_name;
                        }
                     }
                 }



> The error i got is -Fatal error: Uncaught Error: Call to a member
> function bind_param() on boolean and  Stack trace: #0 {main} thrown

3 个答案:

答案 0 :(得分:0)

尝试了各种方法,最后以此结束。 我没有直接搜索Product_id,而是将它们存储在一个数组中,然后在Product_info中搜索它。它完成了这项工作。

    $mysqli=new mysqli("127.0.0.1","root","","bargad");//Connecting to the database
                    if($mysqli->connect_error)
                    {
                        echo "Couldnt connect to server";

                    }
                    else
                    {
                        $query="SELECT Product_id from User_info WHERE User_id=?";
                        $statement=$mysqli->prepare($query);
                        //binding parameters
                        $statement->bind_param('s',$u_id);//u_id is given
                        $statement->execute();
                        $statement->bind_result($pdt_id);
                        $i=0;//index of the array
                        while($statement->fetch())
                        {
                            $j[i]=$pdt_id;
                            ++i;
                        }
                        foreach($j as $pdt_id)
                        {
                         $query2="SELECT Product_name from Product_info WHERE Product_id=?";
                            $statement_2=$mysqli->prepare($query2);
                            $statement_2->bind_param('s',$pdt_id);
                            $statement_2->execute();
                            $statement_2->bind_result($pdt_name);
                            while($statement_2->fetch())
                            {
                                echo $Product_name;
                            }
                         }
                     }

答案 1 :(得分:0)

你必须改变两件事。

  1. 首先,不必使用两个单独的查询,而是使用带JOIN的单个查询。
  2. 您必须使用PDO而不是mysqli。
  3. 有了这个,你只需要几行代码:

    $dsn = "mysql:host=127.0.0.1;dbname=bargad;charset=utf8";
    $opt = [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES   => false,
    ];
    $pdo = new PDO($dsn, "root", "", $opt);
    
    $query = "SELECT Product_name FROM Product_info p, User_info u 
                     WHERE p.Product_id=u.Product_id AND User_id=?"; 
    $stmt = $pdo->prepare($query);
    $stmt->execute($u_id);
    $data = $stmt->fetchAll(PDO::FETCH_COLUMN);
    

    在$ data变量中,您可以使用foreach()直接回显您的产品,或者将其传递给模板。

答案 2 :(得分:-1)

使用存储过程:

PHP:

$stmt = $dbh->prepare("CALL myProcedure($userId)");

// call the stored procedure
$stmt->execute();

MYSQL:

CREATE DEFINER=`root`@`localhost` PROCEDURE `productName`(IN userId INT)

DECLARE productId INT;
SET productId = SELECT Product_id from User_info WHERE User_id=userId;

SELECT Product_name from Product_info WHERE Product_id=productId

BEGIN
/**

这将返回一个结果集,仅包含产品名称

This是关于存储过程的一个很好的教程。

祝你好运