2017-07-07 85 views
0

这是我的查询:无效的参数数:参数没有在{路径}定义

SELECT qa.id, 
     qa.subject, 
     qa.category cat, 
     qa.keywords tags, 
     qa.body_html, 
     qa.amount, 
     qa.author_id author, 
     qa.visibility, 
     qa.date_time, 
     COALESCE(u.reputation, 'N') reputation, 
     COALESCE(CONCAT(u.user_fname, ' ', u.user_lname), 'ناشناس') name, 
     COALESCE(u.avatar, 'anonymous.png') avatar, 

    (SELECT COALESCE(sum(vv.value),0) 
    FROM votes vv 
    WHERE qa.id = vv.post_id 
    AND 15 = vv.table_code) AS total_votes, 

    (SELECT COALESCE(sum(vt.total_viewed),0) 
    FROM viewed_total vt 
    WHERE qa.id = vt.post_id 
    AND 15 = vt.table_code 
    LIMIT 1) AS total_viewed 
FROM qanda qa 
INNER JOIN qanda_tags qt ON qt.qanda_id = qa.id 
INNER JOIN tags ON tags.id = qt.tag_id 
LEFT JOIN users u ON qa.author_id = u.id 
AND qa.visibility = 1 
WHERE qa.type = 0 
    AND tags.name = :t 
ORDER BY total_votes DESC, 
     qa.id DESC 
LIMIT :j, 
     11; 

这是print_r()参数阵列的结果:(我将它传递给查询作为​​参数)

Array ([:t] => برچسب1 [:j] => 0) 

当我执行查询,它抛出这个错误:

Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\xampp\htdocs\myweb\others\questions.php:140 Stack trace: #0 C:\xampp\htdocs\myweb\others\questions.php(140): PDOStatement->execute(Array) #1 C:\xampp\htdocs\myweb\application\other.php(21): questions->index() #2 C:\xampp\htdocs\myweb\index.php(149): require_once('C:\xampp\htdocs...') #3 {main} thrown in C:\xampp\htdocs\myweb\others\questions.php on line 140

任何人都可以找到问题吗?我盯着它1个小时,对我来说似乎很好。

+1

我们可以看到你绑定参数的代码 –

回答

0

您应该使用

array(':t' => برچسب1 ':j' => 0) 
0

你可能会运行与PDO模拟参数的方式问题。

见我的答案在这里:Parametrized PDO query and `LIMIT` clause - not working

所以,你应该可以关闭模​​拟参数:

$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

否则你必须绑定一个PHP整数,并将其指定为一个整数:

$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, true); 
... 
$stmt->bindValue('j', (int) $int, PDO::PARAM_INT);