SQL查询到AJAX无法正常工作,直接输入工作正常

时间:2010-01-08 09:56:06

标签: php sql ajax

在查询中传递变量时,SQL查询不通过AJAX页面提供输出。甚至行数的计数也给出零(0)。与传递的变量相同的查询的echo显示为具有值。

当从浏览器页面复制并粘贴相同(替换)到AJAX页面中的查询时,它会给出结果。

代码如下(AJAX页面中的第一个SQL代码,变量作为参数):

$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 个答案:

答案 0 :(得分:2)

您应该使用字符串连接来构建查询,例如

"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()转义字符串变量。

答案 1 :(得分:0)

终于明白了...... 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'

感谢所有人的努力...这真的意味着很多!

相关问题