繁体   English   中英

从多个表中选择-PHP

[英]select from multiple tables -PHP

我正在尝试执行此查询

SELECT category_request.request_id
FROM category_request, event, user
WHERE category_request.category_name = event.category_name 
AND user.user_id = event.moderator_id

当我尝试在我的数据库上运行时,可以正常运行,如下所示:

在此处输入图片说明

但是由于某种原因(也许是因为我正在加入一个连接?),我得到了一个错误:

mysqli_stmt_bind_param():变量数与准备好的语句中的参数数不匹配

而且我可以肯定的是,从表中只需要一个列即可,这是php文件

<?php
define('__ROOT__', dirname(dirname(__FILE__))); 
require_once(__ROOT__.'/config.php'); 


/*  $event_name = $_POST["event_name"];
    $event_description = $_POST["event_description"];
     $event_date = $_POST["event_date"];
    $event_time = $_POST["event_time"];
    $max_members = $_POST["max_members"]; 
    $ack_needed = $_POST["ack_needed"];
    $category_name = $_POST["category_name"];
    $event_location = $_POST["event_location"]; */

    $event_name = (isset($_POST['event_name']) ? $_POST['event_name'] : '');
    $event_description = (isset($_POST['event_description']) ? $_POST['event_description'] : '');
    $event_date = (isset($_POST['event_date']) ? $_POST['event_date'] : '');
    $event_time = (isset($_POST['event_time']) ? $_POST['event_time'] : '');
    $max_members = (isset($_POST['max_members']) ? $_POST['max_members'] : '');
    $ack_needed = (isset($_POST['ack_needed']) ? $_POST['ack_needed'] : '');
    $category_name = (isset($_POST['category_name']) ? $_POST['category_name'] : '');
    $event_location = (isset($_POST['event_location']) ? $_POST['event_location'] : '');
    $moderator_id = (isset($_POST['moderator_id']) ? $_POST['moderator_id'] : '');



    $result = mysqli_prepare( $con, "SELECT category_request.request_id FROM category_request, event, user
        WHERE category_request.category_name = event.category_name AND user.user_id = event.moderator_id")                                              

    or die(mysqli_error($con));

    mysqli_stmt_bind_param($result,"i", $category_id)
    or die(mysqli_error($con)); 


    mysqli_stmt_execute($result)
    or die(mysqli_error($con));







   /* $statement = mysqli_prepare($con,     
    "INSERT INTO event (event_name, event_description, event_date
                                    , event_time, max_members, ack_needed, 
                                    category_name, moderator_id,event_location)     VALUES (?, ?, ?, ? ,?, ?, ?, ?, ?)")                                                                                    
    or die(mysqli_error($con));

    mysqli_stmt_bind_param($statement, "ssssssisis", $event_name, $event_description, $event_date,   $event_time, $max_members, $ack_needed,                                                                                    
                                                                            , $category_name, $moderator_id,$event_location)
    or die(mysqli_error($con));
    mysqli_stmt_execute($statement)
    or die(mysqli_error($con)); */

    $response = array(); 
    $response["success"] = true;  

    echo json_encode($response);

    mysqli_close($con)
    or die(mysqli_error($con));
?>

您正在尝试做一个准备好的语句,而不仅仅是使用mysqli_query 如果您确实确实打算使用准备好的语句,例如在mysqli_stmt_bind_param函数中使用占位符,那么您需要包含? 作为准备好的语句中的占位符。

Buuuut,由于我在查询的任何位置都没有看到category_id引用,也许您需要使用mysqli_query并获取所有结果? 例如:

$result = mysqli_query( $con, "SELECT category_request.request_id FROM category_request, event, user WHERE category_request.category_name = event.category_name AND user.user_id = event.moderator_id");
if(mysqli_num_rows($result)) {
  while($row = mysqli_fetch_row($result)) {
    // do something with $row
  }
} else {
  echo "no results";
}

在您的查询中:

$result = mysqli_prepare( $con, "SELECT category_request.request_id FROM category_request, event, user
        WHERE category_request.category_name = event.category_name AND user.user_id = event.moderator_id")  or die(mysqli_error($con));

没有占位符,因此mysqlibinding时不知道该做什么。

mysqli_stmt_bind_param($result,"i", $category_id)
or die(mysqli_error($con));

占位符告诉驱动程序将绑定值放在何处。 因此取出:

mysqli_stmt_bind_param($result,"i", $category_id) or die(mysqli_error($con)); 

或放置一个占位符, ? 在您的查询中,以便它可以为您绑定(我在下面对您的表结构进行了疯狂的假设,如果这是正确的实现,请对其进行更正)。

$result = mysqli_prepare( $con, "SELECT category_request.request_id FROM category_request, event, user
        WHERE category_request.category_name = event.category_name AND user.user_id = event.moderator_id and category_request.category_id = ?")  or die(mysqli_error($con));

有关更多示例,请参见: http : //php.net/manual/en/mysqli.quickstart.prepared-statements.php

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM