2016-03-07 50 views
0

因此,我的查詢在實際的phpmysql服務器上工作時,我手動鍵入一些值,但在php我有一些困難。如何在WHERE行中放置多個值=(?)SQL php語句

這是我SQL表:

userID | forename | surname |  email   | age | 
------------------------------------------------------------ 
    1 | Jack | Wolf | [email protected]  | 19 | 
    2 | Mark | Smith | [email protected] | 18 | 
    3 | Ben  | Cas  | [email protected]  | 21 | 
    4 | Jos  | Jis  | [email protected]  | 19 | 
    5 | Luke | Kils | [email protected]  | 23 | 
------------------------------------------------------------ 

基本上,我想在一些UserID值傳遞這樣1,3,5,它應該顯示:

userID | forename | surname |  email   | age | 
------------------------------------------------------------ 
    1 | Jack | Wolf | [email protected]  | 19 | 
    3 | Ben  | Cas  | [email protected]  | 21 | 
    5 | Luke | Kils | [email protected]  | 23 | 
------------------------------------------------------------ 

的用戶ID值可以根據改變什麼用戶選擇它可以是2甚至1,2,3,4或甚至1,2,3,4,5

這是我的php代碼:

<?php 
require "init.php"; 
if(!empty($_POST['userID'])){ 
    $userID = $_POST['userID']; 
    echo $_POST['userID']; 
    $stmt = "SELECT userID, forename, surname, email, age 
      FROM users 
      WHERE userID IN (?)"; 
    $result = $conn-> prepare($stmt); 
    $result->bind_param('i', $userID); 
    $result->execute(); 
    $outcome=$result->get_result(); 
    $response = array(); 
    if(($outcome->num_rows)>0){ 
     while($row = $outcome->fetch_assoc()){ 
      $response[] = array 
      (
       "userID" => $row["userID"], 
       "forename" => $row["forename"], 
       "surname" => $row["surname"], 
       "email" => $row["email"], 
       "age" => $row["age"] 
      ); 
     } 
    echo json_encode($response); 
    } 
    else{ 
     echo json_encode("None found"); 
    } 
} 

?> 

當我回聲$userID = $_POST['userID'];我得到1,2,31,但後來這些都沒有被正確地傳遞給SELECT STATEMENT。我如何解決它?

感謝

+0

[您如何在mysqli預準備語句中使用IN子句](http://stackoverflow.com/questions/772913/how -do-mysqli-prepared-statements) – apokryfos

+0

簡而言之,你不能用'in'和可變數量的數組成員來使用一個準備好的參數。 – apokryfos

+0

@apokryfos,我該怎麼做?對不起,我是'php'的新手[ –

回答

-1
select userName from Table where user_id in (1, 2, 3);. 

,你可以使用這種格式$ _ POST [「用戶ID」]或轉換格式並使用它。

+0

如何轉換'$ _POST ['userID']'做到這一點?就像我在我的服務器上運行'sql'語句一樣,因爲我手動輸入了'1,2,3'。這就是我如何對'$ _POST ['userID']'做同樣的事情 –

1

東西沿着這些線路

... 
$userIDs = implode(",",$_POST['userID']); //Array of user ids 
$qs = array_fill(0,count($userIds),"?"); 
$stmt = "SELECT userID, forename, surname, email, age 
     FROM users 
     WHERE userID IN (".implode(",",$qs).")"; 
$bindParams = $userIDs; //Array for the bind parameters 
$bindParams = array_unshift($bindParams, "i"); //Prefix with "i" 
call_user_func_array([$result, 'bind_param'],$bindParams); 
... 

的想法是,你的發言將需要儘可能多的「?」因爲你綁定了許多整數,所以有用戶ID。

您將使用call_user_func_array以可變數量的參數調用bind_param函數。請注意,如果您使用的是PHP 5.6或更高版本,則可以執行以下操作:$result->bind_param("i",...$userIDs)