【发布时间】:2013-12-27 00:42:42
【问题描述】:
我无法让这个函数使用解码的 json 数组运行。
例如,我尝试使用 PDO 准备语句获取一个数组:
*注意:$user 与解码后的 json 数组一起传递。
public function get_pagnated_qs($user){
////////////////////////Actual
$sth = $this->dbh->prepare("SELECT a.quest_id, a.quest_title, a.quest_desc, b.qcat_name,c.qtype_title FROM eq_question_s AS a INNER JOIN eq_question_category AS b ON a.qcat_id = b.qcat_id INNER JOIN eq_question_type AS c ON a.qtype_id=c.qtype_id ORDER BY quest_id LIMIT ?, ?");
$sth->execute(array($user->start, $user->per_page));
$result = json_encode($sth->fetchAll());
return $result;
}
它不会生成对象(我在 javascript 端回显对象时发现。
另一方面,如果我用实际数字(即0,3)替换两个?,那么一切都会完美运行。
功能是将$result作为编码的json返回给客户端进行处理并格式化成表格。
不知道这段代码有没有问题?
假设我已将 json 数组正确解码为对象,否则会有太多代码令人沮丧。
也许只是一些见解会有所帮助,但我不想让任何人感到沮丧。
获取实际返回并生成表单(功能的一部分)的客户端js是:
function showListOfPaginatedQuestions(jsonData) {
alert('pagED RAN!');
alert(jsonData);
console.log(jsonData);
var table = '<table width="600" cellpadding="5" class="table table-hover table-bordered"><thead><tr><th scope="col">Category</th><th scope="col">Type</th><th scope="col">Question</th><th scope="col">Question Description</th><th scope="col"></th></tr></thead><tbody>';
$.each( jsonData, function( index, user){
table += '<tr>';
table += '<td class="edit" field="qcat_id" user_id="'+user.quest_id+'">'+user.qcat_name+'</td>';
});
$('div#content').html(table);
}
谢谢
【问题讨论】:
-
如果是
start和per_page的对象,你可以试试var_dump($user),否则就没有问题了。 -
你永远不应该假设你的查询有效。您应该 a) 在调用
prepare()后验证$sth是否确实包含有效的PDOStatement对象 b) 在调用execute()时验证fetchAll()不返回falsec) 在代码返回时处理所有错误情况不要走上幸福的道路 - 记录错误,以便您了解问题所在。 -
哼...真的可以绑定'吗?到 SQL 的 LIMIT 参数?我认为这仅适用于变量。如果这是真的,那么您的查询不可能发回带有两个的任何数据?代替 LIMIT 分隔符
标签: javascript php pdo json