Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql-在单个查询行中从两个表中检索值_Php_Mysql - Fatal编程技术网

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]

我的问题对大多数人来说似乎很容易,但它也有自己的曲折之处。我马上就说到点子上

我有一个PHP代码,它由一个MySQL查询组成,其功能是从一个名为
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>';
}