2015-05-07 5 views
0

У меня есть следующий код:PHP/MySQL - подготовленный оператор отладки

$sql = "SELECT..."; 
$stmt = $db->prepare($sql); 
$stmt->bind_param("<types>", $params...); 
$stmt->execute(); 
$resultSet = $stmt->get_result(); 

Мой вопрос заключается в том, как именно я могу увидеть запрос, являющийся фактически выполняется?

Если я выполняю этот запрос напрямую (без привязок) через клиент MySQL, он отлично работает. Но в этом фрагменте кода что-то пошло не так, и я пытаюсь понять, что.

Типы и параметры в $ stmt-> bind_param() кажутся правильными, но он возвращает пустой набор результатов.

Кто-нибудь?

+0

Предоставьте запрос на выборку –

+0

вы можете var_dump ваше заявление – xNeyte

+0

позволит также ошибки, так что вы можете увидеть, что именно не так ini_set («display_errors», 1); – mandza

ответ

0

Я не знаю, как получить «сырой» запрос за заявлением.

, но я бы временный поворот на протоколирования MySQL запросов, чтобы увидеть, что происходит:

How to enable MySQL Query Log?

0

обработка обычно ошибка помогает при отладке кода:

if (false === ($stmt = $db->prepare($sql))) { 
    echo 'error preparing statement: ' . $db->error; 
} elseif (!$stmt->bind_param("<types>", $params...)) { 
    echo 'error binding params: ' . $stmt->error; 
} elseif (!$stmt->execute()) { 
    echo 'error executing statement: ' . $stmt->error; 
} 
+0

Запрос выполняется без проблем, но возвращает пустой набор результатов. – darxysaq

+0

Пожалуйста, покажите свой запрос, как уже спрашивал шинча-чинчор. – RonaldPK

1

Вы можете попробовать ниже код:

$sql = "SELECT education, treat, investigation FROM wizard WHERE question1 = :question1 AND question2 = :question2 AND question3 = :question3 AND question4 = :question4 AND question5 = :question5"; 
$stmt = $db->prepare($sql); 
$stmt->bindParam(':question1', $question1); 
$stmt->bindParam(':question2', $question2); 
$stmt->bindParam(':question3', $question3); 
$stmt->bindParam(':question4', $question4); 
$stmt->bindParam(':question5', $question5); 
$stmt->execute(); 
$resultSet = $stmt->get_result(); 
0

Окончательного запроса нет. Сервер получает ваш SQL-оператор и ваши параметры и выполняет их оптимизацию. Сам запрос никогда не будет стрифицирован вместе с параметрами.

0

Возможным решением является реализация другой пользовательской функции для отображения любых ошибок. Обратите внимание, что вам нужно будет изменить для вашей конкретной ситуации:

<?php 
    function showerror($sql, $types, $params){ 
     echo "There is an error:\r\n"; 
     print_r(error_get_last()); //return the error, as well as file and line number 
     echo "SQL: ".$sql."\r\nTypes: ".$types; 
     var_dump($params); 
    } 

    $sql = "SELECT * FROM users WHERE firstName=? AND lastName=?"; 
    $types = "sss"; 
    $params = array("Bob", "Smith"); 
    if(strlen($types)!=count($params)) showerror($sql, $types, $params); //make sure number of types is equal to the number of params 
    if(!$stmt = $db->prepare($sql)) showerror($sql, $types, $params); 
    if(!$stmt->bind_param($types, $params...)) showerror($sql, $types, $params); 
    if(!$stmt->execute()) showerror($sql, $types, $params); 
    $resultSet = $stmt->get_result(); 
?> 
Смежные вопросы