我在一个数据库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
,那么我想显示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
答案 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)
你必须改变两件事。
有了这个,你只需要几行代码:
$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是关于存储过程的一个很好的教程。
祝你好运