Кто-то, пожалуйста, можете понять, почему следующий подготовленный устав ничего не возвращает? - PullRequest
0 голосов
/ 01 мая 2010
$stmt = mysqli_prepare($link,"
    SELECT *
      FROM ads
     INNER JOIN dept ON dept.id_dept = ads.in_dpt
     INNER JOIN members ON members.idMem = ads.from_Mem
     INNER JOIN sub_cat_ad ON id_sub_cat = ads.ads_in_Cat
     INNER JOIN cat_ad ON idCat_ad = sub_cat_ad.from_cat_ad
     WHERE ads_in_Cat = ? ");

if(isset($_GET['fromSCat'])){
    $fromSCat = mysqli_real_escape_string($link,$_GET['fromSCat']);
}

mysqli_stmt_bind_param($stmt,'i',$fromSCat);
mysqli_stmt_execute($stmt);
mysqli_stmt_fetch($stmt);

$tot=mysqli_stmt_num_rows($stmt); //Ouput: 0

Без подготовленного заявления все в порядке

Ответы [ 2 ]

1 голос
/ 01 мая 2010

Возможно, причина не в том, что он возвращает 0, но вы дважды экранируете $fromSCat - вам не нужно escape_string в подготовленных выражениях, bind_param уже это делает. Попробуйте закомментировать escape_string и посмотрите, что произойдет.

Кроме того, вы можете отключить вызовы bind / exec / fetch внутри оператора if, если только $fromSCat не определено ранее в скрипте.


Комментарий к комментарию : эта ошибка означает, что ваша база данных отрывочна. Есть ли у вас первичные ключи и индексы в соответствующих таблицах? mysqli немного странно для исключения из него, это не его дело. Если у вас нет доступа для исправления таблиц БД, добавьте mysqli_report(MYSQLI_REPORT_OFF); в верхней части скрипта.

(также, если вы можете: используйте PDO . Это лучше и чище как в синтаксисе, так и в документации.)

1 голос
/ 01 мая 2010

У вас есть параметры mysql_real_escape_string() в обратном направлении. это ($string_to_escape, $optional_database_handle). Таким образом, вы пытаетесь выполнить запрос к чему-то вроде WHERE ads_in_Cat='Resource #1' вместо параметра $ _GET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...