1

だからこれは私の問題の短いバージョンです:

これは機能します:

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

結果を取得し、しばらくしてすべてを配列にパックし、json_encodeを使用してそれをajaxファイルに送り返します。ここで結果を一覧表示します。そしてそれは完璧に機能します。

しかし、クエリにもう1つ追加すると、空が返されるだけなので、これは機能しません。

$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

PHPでの長さを計算$some_variableします。なぜmysqlを使用するのLENGTHですか?$some_variablePHPで長さがgreter0であることを検出できる場合は、クエリを分離してください。

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 に答える
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 に答える