2016-12-15 40 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