Javascript PDO fetchAll、fetch及其在解码JSON数组中的使用
我无法使用解码的json数组运行此函数。 例如,我尝试使用PDO prepared语句获取数组: *注意:Javascript PDO fetchAll、fetch及其在解码JSON数组中的使用,javascript,php,pdo,json,Javascript,Php,Pdo,Json,我无法使用解码的json数组运行此函数。 例如,我尝试使用PDO prepared语句获取数组: *注意:$user与解码的json数组一起传递 public function get_pagnated_qs($user){ ////////////////////////Actual $sth = $this->dbh->prepare("SELECT a.quest_id, a.quest_title, a.quest_desc, b.q
$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是:
函数显示问题列表(jsonData){
警报('pagED RAN!');
警报(jsonData);
console.log(jsonData);
变量表='CategoryTypeQuestionQuestionQuestionDescription';
$.each(jsonData,函数(索引,用户){
表+='';
table+=''+user.qcat_name+'';
});
$('div#content').html(表格);
}
谢谢关于准备好的语句,您必须了解一些事情。字符“?”不仅仅是占位符,它指的是查询的实际参数,如条件或值。关键是当MySQL准备查询时,它知道当查询实际执行时,条件会转到这里,或者该值将更新为以下内容:
$stmt = $db->prepare("SELECT * FROM table WHERE column=?");
$stmt = $db->prepare("UPDATE table SET column=? WHERE keyColumn=?");
这些都是可以准备和理解的正确陈述。但这些不是简单的变量,例如,你不能这样做:
$stmt = $db->prepare("SELECT * FROM ? Where column='1726'");
它们是参数,不像php中的$whater
那样是可变的,它们不是简单地被你给它们的任何值所取代(sql注入仍然是一个巨大的问题),sql将它们作为参数对待,它们有特定的位置可以使用,并且限制?,?不是其中之一,遗憾的是:p
在执行以下操作之前,只需将其分配给变量:
public function get_pagnated_qs($user){
////////////////////////Actual
$start = $user->start;
$perPage = $user->per_page;
$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 $user, $perPage");
$sth->execute();
$result = json_encode($sth->fetchAll());
return $result;
}
你可以尝试
var\u dump($user)
当这是一个start
和per\u page
的对象时,否则就会出现另一个问题。你不应该仅仅假设你的查询可以工作。你应该a)验证$sth
在prepare()之后实际包含一个有效的PDOStatement
对象
被调用b)验证fetchAll()
在调用execute()
c)处理代码无法正常运行时的所有错误情况-记录错误,以便查看问题所在。哼。。。是否真的可以将“?”绑定到SQL的LIMIT参数?我以为这只是变量。如果这是真的,那么您的查询不可能返回任何包含两个参数的数据?你刚刚解决了我在6个小时内遇到的问题。。。衷心感谢!顺便说一句,你是如何对PDO有如此深刻的理解的?我应该从哪里开始更好地理解它?有什么好的来源吗?我的意思是,比php官方网站上的pdo文档更好?我阅读了mysql开发人员的pdo教程,它真的有关于准备语句、使用语句、错误管理等的所有基本指南。也通过尝试:)谢谢你的参考!感谢:)
public function get_pagnated_qs($user){
////////////////////////Actual
$start = $user->start;
$perPage = $user->per_page;
$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 $user, $perPage");
$sth->execute();
$result = json_encode($sth->fetchAll());
return $result;
}