1

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

这有效:

$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)");

因此,有了这个事情就不起作用了,但只有 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>');

                    }); 

                }
            });

        });
4

4 回答 4

3
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);
于 2012-11-13T09:07:15.267 回答
0

尝试这个;

 $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 等,这很冷。

于 2012-11-13T09:01:47.520 回答
0

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

<?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 端进行测试并完全跳过查询 - 在这种情况下,没有记录可以满足条件。

于 2012-11-13T09:31:20.343 回答
0

用php计算长度$some_variable,为什么要用mysql LENGTH?如果您可以在 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
}
于 2012-11-13T09:14:42.170 回答