选择

时间:2015-05-06 13:03:30

标签: php mysql post

我正在尝试从用户在上一页上选择的数据库中选择数据。

我使用$ _POST获取数据并进行以下查询

$result=mysql_query("SELECT * FROM $table WHERE
  $field   LIKE'%$fieldvalue%'   AND
  $filter1 LIKE'%$filter1value%' AND  
  $filter2 LIKE'%$filter2value%' AND
  $filter3 LIKE'%$filter3value%' AND
  $filter4 LIKE'%$filter4value%' ")or die('ERROR 238 - ' . mysql_error());

这会带来错误

  

错误238 - 您的SQL语法出错;检查与您的MySQL服务器版本相对应的手册,以获得正确的语法,以便在'附近使用。喜欢' %%''在第2行

任何人都可以看到我做错了吗?

更新

变量可能是空白的 - 我该如何检查? 感谢

2 个答案:

答案 0 :(得分:0)

首先,我们需要更改代码以启用代码调试:

我添加了curley braces,因为我觉得它们更容易阅读。 (更多关于那些她:Curly braces in string in PHP)。我还在SQL中添加了反引号,用于标记字段名称。

$sql="SELECT * FROM $table WHERE
`{$field}`   LIKE'%{$fieldvalue}%'   AND
`{$filter1}` LIKE'%{$filter1value}%' AND  
`{$filter2}` LIKE'%{$filter2value}%' AND
`{$filter3}` LIKE'%{$filter3value}%' AND
`{$filter4}` LIKE'%{$filter4value}% ;";

echo $sql; // this allows you to see the SQL you are making

$result=mysql_query($sql)or die('ERROR 238 - ' . mysql_error());

现在很明显,当您希望其他人使用您的代码时,您需要注释掉echo行。但是,如果您收到SQL错误,则有助于查看SQL。由于我看不到你的SQL,我将做一系列有根据的猜测,并为每一个提供答案。

猜1:没有设置所有字符串。

我的直觉反应是$fieldvalue未设置或为空字符串。如果您没有看到一个或多个占位符的任何内容,并且您看到一对反引号或'%%',则问题是代码中的其他位置字符串没有获得值。

因此,对于此解决方案,请检查您是否正在根据用户输入构建字符串。

猜猜2:表格没有提供所有值

当你处理用户提供的值时,我希望你有一些好的和坚实的东西:

if(isset($_POST['fieldvalue']){
    $fieldvalue = mysql_real_escape_string(trim($_POST['fieldvalue']));
    if($fieldvalue == ''){
        $fieldvalue='SomeDefaulValue';
    }
}

对于每一个值。

就个人而言,这似乎太多了,我会使用阵列,但这就是我。

假设您没有证明默认值(这是一个常见的错误),并且由于某种原因,表单没有提供您需要的所有值,这也会导致输出相同而不设置字符串。

猜猜3:一个容易被忽视的字符串名称差异

总是值得检查一下,您没有将值设置为$feildvalue,然后调用$fieldvalue(请注意略有拼写错误。

它发生在我们所有人身上(另一个好的论据是针对一个数组和一些循环(更少的类型和错误)。

答案 1 :(得分:-1)

<?php

$q = "SELECT * FROM $table WHERE 1=1";
if($field != "" or $fieldvalue != "" ){
    $q .= " and $field   LIKE'%$fieldvalue%'";
}

if($filter1 != "" or $filter1value  != "" ){
    $q .= " and $filter1 LIKE'%$filter1value%'";
}

if($filter2 != "" or $filter2value  != "" ){
    $q .= " and $filter2 LIKE'%$filter2value%'";
}

if($filter3 != "" or $filter3value  != "" ){
    $q .= " and $filter3 LIKE'%$filter3value%'";
}


if($filter4 != "" or $filter4value  != ""){
    $q .= " and $filter4 LIKE'%$filter4value%'";
}


$result=mysql_query($q)or die('ERROR 238 - ' . mysql_error());

?>