2013-12-09 3 views
0

У меня возникли проблемы с тем, чтобы эта функция выполнялась с расшифрованным массивом json. Например, я попытался получить массив с подготовленным оператором PDO: * ПРИМЕЧАНИЕ: $user передается с расшифрованным массивом json.PDO fetchAll, выборка и ее использование с расшифрованным массивом 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; 
} 

он не будет создавать объекты (я узнал, когда я эхо объекта в javasccript стороны.

С другой стороны, если я заменю два ? с фактическим числом (т.е. 0,3), то все будет работать идеально.

функция должна вернуть $ результат в виде закодированного 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); 
} 

Спасибо

+1

Вы можете попробовать 'var_dump ($ пользователю)', когда это объект с '' start' и per_page' чем это нормально, иначе есть еще одна проблема. – Haneev

+1

Вы НИКОГДА не должны просто предполагать, что ваш запрос работает. Вы должны: a) убедиться, что '$ sth' действительно содержит действительный объект« PDOStatement »после того, как' prepare() 'вызван b) проверить' fetchAll() 'не возвращает' false', когда вы вызываете 'execute()' c) обрабатывать все условия ошибки, когда код не идет по счастливому пути - регистрируйте ошибки, чтобы вы могли понять, в чем проблема. –

+0

гул ... действительно ли можно связать '?' к аргументу LIMIT SQL? Я думал, что это только для переменных. Если это правда, невозможно, чтобы ваш запрос когда-либо отправлял данные с двумя? вместо разделителя LIMIT –

ответ

1

Там-то вы должны понимать, о подготовленных заявлениях. Персонаж '?' это не просто местозаполнитель, он ссылается на фактический параметр запроса, такой как условие или значение. Дело в том, что, когда MySQL готовит запрос, он знает, что, когда запрос на самом деле будет выполняться условие будет идти здесь, или значение будет обновлен к чему-то:

$stmt = $db->prepare("SELECT * FROM table WHERE column=?"); 
$stmt = $db->prepare("UPDATE table SET column=? WHERE keyColumn=?"); 

те правильные высказывания, которые могут быть подготовлен и понят. но это? не просто переменные, для Exemple, вы не можете сделать это:

$stmt = $db->prepare("SELECT * FROM ? Where column='1726'"); 

они параметры, не изменяются как $whatever в PHP, они не просто заменить на любое значение, вы даете им (инъекции SQL все равно будет огромная проблема) SQL обрабатывает их как параметры, и у них есть конкретные места, где вы можете их использовать, и LIMIT?,? не один из них, к сожалению: р

просто присвоить их переменным перед:

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; 
} 
+0

Вы просто решили, что я расстроил 6 часов с ... Спасибо, искренне! Кстати, как вы так глубоко понимаете PDO? Где мне лучше понять это? Есть ли какой-нибудь источник, который хорош?Я имею в виду, лучше, чем документ pdo на официальном сайте php? – Ezeewei

+0

Я прочитал учебник PDO для разработчиков mysql http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers, у него действительно есть все основные рекомендации по подготовке заявлений, их использованию, управлению ошибками и т. Д. также, пытаясь :) –

+0

Спасибо за ссылку! Оценил :) – Ezeewei

Смежные вопросы