2013-02-17 73 views
-1

我不知道我在這裏做錯了什麼?有人可以幫幫我嗎?當執行以下查詢我收到以下錯誤:PHP PDO:無效的參數編號:綁定變量的數量與令牌的數量不匹配

警告:PDOStatement對象::執行()[pdostatement.execute]:SQLSTATE [HY093]:無效參數號:綁定變量的數目不匹配的令牌

的數
// Required files 
include("../../includes/common.inc.php"); 
require_once("../../includes/config.php"); 

session_start(); 

$man_email = $_SESSION['dStation']->getValue('email'); 
//echo $man_email; 
/* Connection vars here for example only. Consider a more secure method. */ 
$dbhost = 'localhost'; 
$dbuser = 'root'; 
$dbpass = ''; 
$dbname = 'dstation_db'; 

try { 
    // Connect and create the PDO object 
    $conn = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb); 
} 
catch(PDOException $e) { 
    echo $e->getMessage(); 
} 

$return_arr = array(); 

if ($conn) 
{ 
$ac_term = "%wa%"; 
//$ac_term = "%".$_GET['term']."%"; 
$query = "SELECT * FROM ds_employee AS e 
      LEFT OUTER JOIN ds_employee_address AS a ON e.id_employee = a.fk_employee 
      LEFT OUTER JOIN ds_employee_detail AS d ON e.id_employee = d.fk_employee 
      LEFT OUTER JOIN ds_department AS g ON d.fk_department = g.id_department 
      LEFT OUTER JOIN ds_job_title AS j ON d.job_title = j.id_job_title 
      LEFT OUTER JOIN ds_manager AS m ON d.fk_manager = m.id_manager 
      WHERE emp_lastname LIKE :term AND man_email = :man_email"; 
    echo $query; 

$result = $conn->prepare($query); 
$result->bindValue(":term", $ac_term, PDO::PARAM_STR); 
$result->bindValue(":man_email", $man_email, PDO::PARAM_STR); 
$result->execute(); 

/* Retrieve and store in array the results of the query.*/ 
while ($row = $result->fetch(PDO::FETCH_ASSOC)) { 
    $row_array['id_employee'] = $row['id_employee']; 
    $row_array['value'] = $row['emp_lastname'] . ', ' . $row['emp_firstname'] . ' - ' . $row['description']; 
    $row_array['lastname'] = $row['emp_lastname']; 
    $row_array['abbrev'] = $row['emp_firstname']; 
    $row_array['job_title'] = $row['description']; 
    $row_array['fk_department'] = $row['dept_name']; 
    $row_array['fk_manager'] = $row['fk_manager']; 


    array_push($return_arr,$row_array); 
} 

} 
/* Free connection resources. */ 
    $conn = null; 
    /* Toss back results as json encoded array. */ 
    echo json_encode($return_arr); 

我根據收到的答案糾正了錯誤。這糾正了錯誤消息,但查詢仍然不起作用。當我贊同查詢,這是獲取返回的內容:

SELECT * FROM ds_employee爲e LEFT OUTER JOIN ds_employee_address AS一個ON e.id_employee = a.fk_employee LEFT OUTER JOIN ds_employee_detail爲d ON e.id_employee = LEFT d.fk_employee OUTER JOIN ds_department AS g ON d.fk_department = g.id_department LEFT OUTER JOIN ds_job_title AS j ON d.job_title = j.id_job_title LEFT OUTER JOIN ds_manager AS m ON d.fk_manager = m.id_manager WHERE emp_lastname LIKE:term AND man_email =: man_email []

我不明白括號是從哪裏來的:man_email?

+1

查詢中的'man_email'之前缺少':' – 2013-02-17 04:06:39

+0

@REF您正在執行的行是'echo $ query;'將其更改爲'echo $ query'。 '###';'如果括號出現在'###'之前,那麼它們是查詢字符串的一部分,如果它們在它後面,那麼它們將在稍後輸出到腳本中。將結果報告回來,以便我們確定它是哪個,然後從那裏繼續。 – 2013-02-17 09:34:46

+0

現在我很困惑。方括號出現在#### – REF 2013-02-17 13:21:32

回答

6
WHERE emp_lastname LIKE :term AND man_email = '[email protected]'"; 

應該是:

WHERE emp_lastname LIKE :term AND man_email = :man_email"; 

如果你想直接在查詢測試電子郵件,你應該暫時註釋掉該行:

$result->bindValue(":man_email", $man_email, PDO::PARAM_STR); 

既然你直接在推杆電子郵件地址而不是使用:token_name您的第二參數綁定失效。如果您將它評論出來,您可以直接輸入測試郵件。然而更簡單的方法是這樣做:

$man_email = '[email protected]'; 

在綁定參數之前創建測試值。這樣你就可以保持查詢完整無損並且不必評論任何事情。完成測試後,請刪除此行。

相關問題