2016-12-15 13 views
1

我尝试做这个查询从多个表-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 

,并选择:

enter image description here

但对于一些原因(也许是因为即时通讯做一个加入?)即时得到一个错误:

mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters in prepared statement

,我肯定知道,只有从表 需要一个科拉姆和这里的

<?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)); 
?> 

回答

2

您正在尝试只使用mysqli_query,使一份声明中,而不是PHP文件。如果您确实想要使用准备好的语句,例如为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"; 
} 
+0

太感谢你了,我一直在寻找类似的东西几个小时,我无法弄清楚自己,你现在救了我很多头疼 – styx

2

在您的查询:

$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不知道当它到达你的binding做什么。

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

+0

行不行在'where子句'中获取未知列'category_request.category_id',但很明显我有[链接](http://imgur.com/a/nAfgd) – styx

+0

是的...请参阅代码之前的注释? '我正在对你的表结构进行粗略的假设,如果这是正确的实现,请更正它们。'category_request.category_id'是一个猜测,放在正确的表和它应该匹配的列中。 – chris85