Php mysql-在单个查询行中从两个表中检索值
我的问题对大多数人来说似乎很容易,但它也有自己的曲折之处。我马上就说到点子上 我有一个PHP代码,它由一个MySQL查询组成,其功能是从一个名为Php mysql-在单个查询行中从两个表中检索值,php,mysql,Php,Mysql,我的问题对大多数人来说似乎很容易,但它也有自己的曲折之处。我马上就说到点子上 我有一个PHP代码,它由一个MySQL查询组成,其功能是从一个名为products的表中选择一个列,product\u name,然后做进一步的工作 代码如下: if(isset($_POST["type"]) && $_POST["type"]=='add') { foreach($_POST as $key => $value){ $new_product[$key]
products
的表中选择一个列,product\u name
,然后做进一步的工作
代码如下:
if(isset($_POST["type"]) && $_POST["type"]=='add')
{
foreach($_POST as $key => $value){
$new_product[$key] = filter_var($value, FILTER_SANITIZE_STRING);
}
unset($new_product['type']);
unset($new_product['return_url']);
$statement = $mysqli->prepare("SELECT product_name FROM products WHERE product_code=? LIMIT 1");
$statement->bind_param('s', $new_product['product_code']);
$statement->execute();
$statement->bind_result($product_name);
while($statement->fetch()){
$new_product["product_name"] = $product_name;
if(isset($_SESSION["cart_products"])){
if(isset($_SESSION["cart_products"][$new_product['product_code']]))
{
unset($_SESSION["cart_products"][$new_product['product_code']]);
}
}
$_SESSION["cart_products"][$new_product['product_code']] = $new_product; //update or create product session with new item
}
}
现在,我想从两个表中检索数据,即产品
和cat_1
,它们都有完全相同的列名。显然,两个表中的数据不同。但是,我也想从cat_1
中检索相同的列,即product_name
我已尝试使用JOIN
方法,但出现以下错误:
致命错误:调用D:\Work\offline\
中布尔值上的成员函数bind_param()
那么,有没有办法做到这一点?任何解决方案都将不胜感激
提前感谢。您应该在此处使用join,但是,由于两个表中的列名相同,您必须提供别名以使其正常工作:
$statement = $mysqli->prepare("
SELECT
products.product_name AS p_product_name,
cat_1.product_name AS c_product_name
FROM products
JOIN cat_1
ON --join clause here, maybe products.product_code = cat_1.product_code--
WHERE products.product_code=? LIMIT 1");
....
$new_product["p_product_name"] = $p_product_name;
...
是的,正确的方法是加入,但诀窍是你想要什么样的加入。
从你的描述来看,你到底想做什么还不清楚,所以我会按要求回答你的问题。另外,bindParam
使用命名变量总是更好(“:pcode”
)
不需要bind_result
或循环,因为您将结果限制为1个。。。
$product=$statement->fetchAll(PDO::FETCH_ASSOC);
echo$product['name'].:'$产品['cat_名称']。'\n
';
…但是当你需要一个循环时。。。
foreach($statement->fetchAll(PDO::FETCH_ASSOC)作为$product){
echo$product['name'].:'.$product['cat_name'.].\n
';
}
如果它们具有相同的列,则在联接
没有意义时使用联合
查询。$mysqli->prepare
如果发生错误,则返回false。当您使用JOIN
方法时,您的查询是什么样子的?您可以使用别名来分隔具有相同列名的表。您的解决方案正在产生另一个错误<代码>1064您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行“:pcode LIMIT 1”附近使用的正确语法语法有问题。是否尝试回显$new\u product['product\u code']
的值?
$statement = $mysqli->prepare("
SELECT products.product_name as name, cat_1.product_name as cat_name
FROM products
LEFT JOIN cat_1 ON products.product_code = cat_1.product_code
WHERE products.product_code = :pcode
LIMIT 1
");
$statement->bindValue(':pcode', $new_product['product_code']. PDO::PARAM_STR);
$statement->$execute();
$product = $statement->fetchAll(PDO::FETCH_ASSOC);
echo $product ['name'] .':'. $product ['cat_name'] . '\n<br>';
foreach ( $statement->fetchAll(PDO::FETCH_ASSOC) as $product ) {
echo $product ['name'] .':'. $product ['cat_name'] . '\n<br>';
}