使用从mysqli查询检索的数据在php中执行另一个mysqli查询
我在数据库中有两个表,一个是使用从mysqli查询检索的数据在php中执行另一个mysqli查询,php,loops,mysqli,Php,Loops,Mysqli,我在数据库中有两个表,一个是User\u info,另一个是Product\u info。我想做的是,如果给我User\u id,那么我将检查表User\u info中与User\u id对应的产品id。然后,我将使用检索到的Product\u id从表Product\u info中查找Product\u name **Table-User_info** User_id Product_id 2 P1 3 P4 2
User\u info
,另一个是Product\u info
。我想做的是,如果给我User\u id
,那么我将检查表User\u info
中与User\u id
对应的产品id
。然后,我将使用检索到的Product\u id
从表Product\u info
中查找Product\u name
**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\u id
是2
,那么我想显示A
和C
以下是我编写的代码:
$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
使用存储过程: PHP: 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
/**
这将返回一个结果集,仅包含产品名称
是一个关于存储过程的好教程
好运尝试了各种方法,最终以这种方式结束。 我没有直接搜索
Product\u id
,而是将它们存储在一个数组中,然后在Product\u 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;
}
}
}
有两件事你必须改变
$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()直接输出产品或将其传递到模板中。您应该查看存储过程。实际上,您可以创建一个mysql函数,该函数接受参数并执行所需的任何逻辑。您可以从一个存储过程返回多个结果集。@Matthew您能举一个小例子吗?检查联接表非常感谢您向我介绍存储过程。用SP替换简单联接是一个非常奇特的想法。将必须在这里使用的联接放在一边,甚至在SQL中的运算符中,为什么不正确地使用预先准备好的语句?例如,只准备一次查询?@YourCommonSense你的意思是这样的$query=“从产品信息中选择产品信息。产品名称=用户。产品名称=用户。产品名称=用户。用户名称=?”;
$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);