SQL-запрос к AJAX не работает, напрямую введенный работает нормально - PullRequest
0 голосов
/ 08 января 2010

Запрос SQL не выводит через страницу AJAX, когда в запросе передаются переменные. Даже количество строк дает ноль (0). echo того же запроса с переданными переменными показывает наличие значений.

При копировании и вставке этого (замена) со страницы браузера в запрос на странице AJAX это дает результат.

Код выглядит следующим образом (первый код SQL на странице AJAX с переменными в качестве параметра):

$qu="SELECT DISTINCT bk.bookname,bk.author,bk.publisher,bk.edition,bk.description,lam.article_name,bk.keywords,bk.qtyinstock FROM lib_article_master lam, lib_book_cd_master bk WHERE bk.bookname='$arr[2]' AND bk.author='$arr[3]' AND bk.publisher='$arr[4]' AND bk.article_id=lam.article_id";//here $arr[2],$arr[3],$arr[4] are variables from another query for comparison in AJAX page    
$r=QrySelect($qu);
echo " <br>  ".$qu;//query is echoed in browser
echo "<br>count : ".mysql_num_rows($r);//count of number of rows
$arr1=mysql_fetch_array($r);    
?>
    <table width="97%" border="0" >
      <tr 
        <td width="11%"><div align="left"><strong>Description </strong></div></td>
      </tr>       
    </table>
    <textarea name="txt_Keywords" style="width:90%; height:90px"><?php echo $arr1[4]; ?></textarea>

А на выходе ничего нет.

Запрос, когда он берется из браузера и возвращается в код вместе со значениями для переменных, мы получаем вывод.

$qu="SELECT DISTINCT bk.bookname,bk.author,bk.publisher,bk.edition,bk.description,lam.article_name,bk.keywords,bk.qtyinstock FROM lib_article_master lam, lib_book_cd_master bk WHERE bk.bookname='Java Complete Reference' AND bk.author='Martin D Leuthen' AND bk.publisher='ABS Publications' AND bk.article_id=lam.article_id";//here $arr[2],$arr[3],$arr[4] are replaced as per browser output
$r=QrySelect($qu);
echo " <br>  ".$qu;//query is echoed in browser
echo "<br>count : ".mysql_num_rows($r);//count of number of rows
$arr1=mysql_fetch_array($r);    
?>
    <table width="97%" border="0" >
      <tr 
        <td width="11%"><div align="left"><strong>Description </strong></div></td>
      </tr>       
    </table>
    <textarea name="txt_Keywords" style="width:90%; height:90px"><?php echo $arr1[4]; ?></textarea>

Мы получаем вывод для вышеуказанного кода с правильным количеством строк из базы данных.

Любая помощь будет отличной.

Ответы [ 2 ]

2 голосов
/ 08 января 2010

Для построения запроса следует использовать конкатенацию строк, например

"SELECT * FROM table WHERE param = '" . $value . "'"

Итак, ваш запрос должен выглядеть так:

$qu="SELECT DISTINCT bk.bookname,bk.author,bk.publisher,bk.edition,bk.description,lam.article_name,bk.keywords,bk.qtyinstock FROM lib_article_master lam, lib_book_cd_master bk WHERE bk.bookname='".$arr[2]."' AND bk.author='".$arr[3]."' AND bk.publisher='".$arr[4]."' AND bk.article_id=lam.article_id";

Кроме того, не забудьте экранировать строковые переменные с помощью mysql_real_escape_string ().

0 голосов
/ 09 января 2010

Наконец-то ... PHEW ... Просто включите «TRIM ()», и проблема сравнения была решена. Пока не знаю, как это удалось, когда код был вставлен из браузера, но в любом случае он работает. давая код ниже ...

$fr0=trim($arr[0], "");//'TRIMS' ALL UNWANTED SPACES FOR COMPARISON TO BE PERFECT
$fr1=trim($arr[1], "");
$fr2=trim($arr[2], "");
$fr3=trim($arr[3], "");
$bkr0=strtolower($fr0);//HERE EVERY SINGLE CHARCTER IS TURNED TO 'LOWER CASE' TO REMOVE ALL POSSIBLE WAYS OF ERRORS IN COMPARISON
$bkr1=strtolower($fr1);
$bkr2=strtolower($fr2);
$bkr3=strtolower($fr3);
//NOW COMPARISON FOR EACH VALUE IS DONE IN A WHILE LOOP BY 'mysql_fetch_row'

спасибо всем за ваши усилия ... это действительно много значило!

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