【问题标题】:Ajax response not working when mysql_query has "AND" in it当 mysql_query 中包含“AND”时,Ajax 响应不起作用
【发布时间】:2012-11-01 17:05:30
【问题描述】:

所以这是我的问题简短版本:

这行得通:

$query = mysql_query("SELECT * FROM `some_table` 
                     WHERE IF (LENGTH('$some_variable') > 0, `$other_variable` LIKE
                               '%$some_variable%' , 0)");

我得到一个结果,一段时间后将它全部打包到一个数组中,并使用 json_encode 将它发送回我的 ajax 文件,我在其中列出结果。而且效果很好。

但是当我在查询中再添加一件事时,它只会返回空,所以 这不起作用:

$query = mysql_query("SELECT * 
                      FROM `some_table` 
                      WHERE `something` = `some_other_thing` AND 
                          IF (LENGTH('$some_variable') > 0, `$other_variable` 
                               LIKE '%$some_variable%' , 0)");

所以 AND 的事情只是不工作,但只有 ajax,我的意思是如果我简单地打印出数组 php 工作得很好。

提前致谢。

这是我的 php 的其余部分

while ($value = mysql_fetch_array($query)) {

$result[] = array
            (       
                gyarto => $value['gyarto'],
                termekcsalad => $value['termekcsalad'],
                kiszereles => $value['kiszereles']
            );
}

echo json_encode($result);

和我的 jquery:

$.ajax({
                    url:"updates/isu.php",
                    type:"POST",
                    data: form,
                    dataType: "json",
                    success: function(data) {


                    $.each(data, function(i)                            
                    {
                       $("#result table").append('<tr><td>'+data[i].gyarto+' '+data[i].termekcsalad+' '+data[i].kiszereles+'</td></tr>');

                    }); 

                }
            });

        });

【问题讨论】:

  • 必须打印 JSON 以响应 AJAX,打印 JSON 并查看其是否有效。
  • 你能告诉我们剩下的 PHP 代码和 AJAX 代码吗?
  • @11684 我现在就发,一秒钟
  • 示例数据(最好采用INSERT INTO ... VALUES (...) 语句的形式)会有所帮助...
  • @charlietfl 但是在独立页面中查询与“AND”一起使用时,它怎么可能纯粹是一个查询问题

标签: php jquery mysql sql ajax


【解决方案1】:

试试这个;

 $sql = "SELECT *, LENGTH('$some_variable') as 'length_of_var'  
                     FROM some_table 
                     WHERE something=some_other_thing AND 
                           length_of_var > 0 AND 
                           `$other_variable` LIKE '%$some_variable%';";


 die($sql);//we will stop here and see how the query looks like.. If it's an AJAX request, you will need to check in your browser console. Use firebug or chrome developer tools.

$query = mysql_query($sql);

您还可以在执行和共享之前记录 sql 字符串吗?这可以帮助您在查询执行之前查看查询的外观,然后我们可以对其进行修改,然后编辑您的 php 代码以修复任何问题。您连接到 SQL 查询的某些变量是空字符串或 null 等,这很冷。

【讨论】:

  • 为什么?一旦你明白你做错了什么,你下次就可以避免它了
  • @mwangi 这对我的 var 长度不起作用?
  • 查询错误,不能在WHERE子句中使用别名
【解决方案2】:
I think you are mixing php language in a mysql query.

试试:

$query = mysql_query("SELECT * FROMsome_table WHEREsomething=some_other_thing AND  (LENGTH('$some_variable') > 0 AND '$other_variable` LIKE '%$some_variable%')");  

这里还有一个关于如何使用 mysql_fetch_array 的示例

mysql_connect("localhost", "mysql_user", "mysql_password") or
    die("Could not connect: " . mysql_error());
mysql_select_db("mydb");

$result = mysql_query("SELECT id, name FROM mytable");

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    printf("ID: %s  Name: %s", $row["id"], $row["name"]);
}

mysql_free_result($result);

【讨论】:

  • $.ajax({ url:"updates/isu.php", type:"POST", data: form, dataType: "json", success: function(data) { // 控制台。 log(data); $.each(data, function(i) { $("#result table").append(''+data[i].gyarto+' '+data[i]. termekcsalad+' '+data[i].kiszereles+''); }); } });
  • 当我用 json_encode 将它发回时,这仍然不起作用,但我什么也没得到,但只有 php 才能工作......我的意思是它适用于你的写作方式,但我需要在查询
  • 是的,当然就像我说的那样,当我在标准 php 页面中打印它时,它会返回良好的结果
【解决方案3】:

在php中计算$some_variable的长度,为什么要用mysqlLENGTH?如果您可以在 PHP 中检测到 $some_variable 的长度大于 0,只需将您的查询分开:

if (strlen($some_variable) > 0) {
   mysql_query("
      SELECT * 
      FROM `some_table` 
      WHERE `something` = `some_other_thing`
        AND `$other_variable` LIKE '%$some_variable%'")
} else {
   // do nothing because your where clause has condition like: something = another AND 0
   // so for each row it's false
}

【讨论】:

  • @Serijio 抱歉,但仍然无法正常工作,我真的认为这是查询中的“AND”,因为没有它可以工作
  • $other_variable 包含什么?静态字符串或 sql 查询或字段名称?也许它包含单引号或双引号?
  • @Mr.Sam 你能给我们提供结果 SQL 查询吗?只需运行echo $your_php_with_sql_string
【解决方案4】:

使用一些“合成”示例数据,查询“按假设”工作

<?php
mysql_connect('localhost', 'localonly', 'localonly') or die(mysql_error());
mysql_select_db('test')  or die(mysql_error());
setup();

$other_variable = 'foo';
$some_variable = 'hell';
$query = mysql_query("SELECT * 
                      FROM `some_table` 
                      WHERE `something` = `some_other_thing` AND 
                          IF (LENGTH('$some_variable') > 0, `$other_variable` 
                               LIKE '%$some_variable%' , 0)");                          
if (!$query) die(mysql_error());
while( false!==($row=mysql_fetch_assoc($query)) ) {
    echo join(', ', $row), "\n";
}

function setup() {
    mysql_query('
        CREATE TEMPORARY TABLE some_table ( 
            id int auto_increment,
            something int,
            some_other_thing int,
            foo varchar(32),
            primary key(id)
        )
    ') or die(mysql_error());

    mysql_query("INSERT INTO some_table (something, some_other_thing, foo) VALUES
        (1, 1, 'hello'),
        (1, 1, 'lalala'),
        (2, 2, 'hellboy')
    ") or die(mysql_error());
}

打印

1, 1, 1, hello
3, 2, 2, hellboy

但我怀疑该查询是否符合您的预期。
例如。如果$some_variable 为空,则更容易在 php 端进行测试并完全跳过查询 - 在这种情况下,没有记录可以满足条件。

【讨论】:

    猜你喜欢
    • 2018-03-25
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    相关资源
    最近更新 更多