PHP PDO:无效的参数编号:绑定变量的数量与令牌的数量不匹配
我不知道我在这里做错了什么?有人可以帮帮我吗?当执行以下查询我收到以下错误: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?
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]';
在绑定参数之前创建测试值。这样你就可以保持查询完整无损并且不必评论任何事情。完成测试后,请删除此行。
查询中的'man_email'之前缺少':' – 2013-02-17 04:06:39
@REF您正在执行的行是'echo $ query;'将其更改为'echo $ query'。 '###';'如果括号出现在'###'之前,那么它们是查询字符串的一部分,如果它们在它后面,那么它们将在稍后输出到脚本中。将结果报告回来,以便我们确定它是哪个,然后从那里继续。 – 2013-02-17 09:34:46
现在我很困惑。方括号出现在#### – REF 2013-02-17 13:21:32