我正在尝试从用户在上一页上选择的数据库中选择数据。
我使用$ _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行
任何人都可以看到我做错了吗?
更新
变量可能是空白的 - 我该如何检查? 感谢
答案 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,我将做一系列有根据的猜测,并为每一个提供答案。
我的直觉反应是$fieldvalue
未设置或为空字符串。如果您没有看到一个或多个占位符的任何内容,并且您看到一对反引号或'%%'
,则问题是代码中的其他位置字符串没有获得值。
因此,对于此解决方案,请检查您是否正在根据用户输入构建字符串。
当你处理用户提供的值时,我希望你有一些好的和坚实的东西:
if(isset($_POST['fieldvalue']){
$fieldvalue = mysql_real_escape_string(trim($_POST['fieldvalue']));
if($fieldvalue == ''){
$fieldvalue='SomeDefaulValue';
}
}
对于每一个值。
就个人而言,这似乎太多了,我会使用阵列,但这就是我。
假设您没有证明默认值(这是一个常见的错误),并且由于某种原因,表单没有提供您需要的所有值,这也会导致输出相同而不设置字符串。
总是值得检查一下,您没有将值设置为$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());
?>