变量连接的mysql查询字符串在phpMyAdmin中运行良好,但在脚本中不能运行PHP

时间:2011-04-11 20:43:45

标签: php mysql phpmyadmin syntax-error

更新时间14/04/2011

还有麻烦。我将代码简化为最简单的形式。我使用IF函数来检查isset()的复选框,这很好。如果选中该复选框,则它会连接由两部分组成的字符串。非常简单。

if (isset($_POST[testType1])) {
   $filterQuery .= "(testType1 = '1'"; 
   }
   $filterQuery .= ") ";
}

当我使用mysql_fetch_assoc并回显$ rows中的信息时,它可以工作。但是,当我在谷歌浏览器中查看页面来源时,它说: Invalid query: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1;

如果我回显$ filterQuery它会正确显示,当我将回显的字符串复制到我的代码中时,MySQL会返回正确的结果:

SELECT * FROM fdatav1 JOIN ddatav1 ON ddatav1.ID = fdatav1.ID WHERE (testType1 = '1')

我也试过将$ filterQuery转换为字符串。没有成功。

UPDATED 12/04/2011

我还有问题,这不是拼写错误。请参阅以下代码:

$query = "SELECT * FROM fdatav1 JOIN ddatav1 ON ddatav1.ID = fdatav1.ID WHERE ";`
$orTrigger = "";`

function setOrTrigger() {
    global $orTrigger;
    if ($orTrigger=="") {
        $orTrigger="OR ";
    }
}

function getTestFilterQuery($testType) {
   if (!(isset($_POST[test1])) && !(isset($_POST[test2])) && !(isset($_POST[test3]))) {
     $returnString = NULL;
     return $returnString;
   }

}

if (isset($_POST[testType1])) {
   $filterQuery .= $orTrigger ."(testType1 = '1'"; 
   setOrTrigger();
   $addTestFilterQuery = getTestFilterQuery("testType1");
   if ($addTestFilterQuery != NULL) {
    $filterQuery .= "AND " .$addTestFilterQuery;
   }
   $filterQuery .= ") ";
}

$connection = mysql_connect(localhost, $username, $password);

if (!$connection) {
   die('Not connected : ' . mysql_error());

}

$db_selected = mysql_select_db($database, $connection);

if (!$db_selected) {
   die ('Can\'t use db : ' . mysql_error());
}

$result = mysql_query($filterQuery);

if (!$result) {
   die('Invalid query: ' . mysql_error());
}

while ($row = @mysql_fetch_assoc($result)) {
   echo $row['name'];
   echo $row['description'];
}

当我回复$ query时,我得到:

SELECT * FROM fdatav1 JOIN ddatav1 ON ddatav1.ID = fdatav1.ID WHERE (testType1 = '1')

当我将其直接复制到mysql_query中时:

mysql_query("SELECT * FROM fdatav1 JOIN ddatav1 ON ddatav1.ID = fdatav1.ID WHERE (testType1 = '1')");

它工作正常。但是当我传递变量时:

的mysql_query($ filterQuery);

我在''附近收到一个语法错误。有谁知道如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

你实际上是在字符串中加上双引号,例如:

$query = '"SELECT * FROM table WHERE col = value"';
echo $query; //output is exactly: "SELECT * FROM table WHERE col = value"

如果是这样,你需要从字符串内部删除",mysql_query或者正常字符串之类的内容:

$query = "SELECT * FROM table WHERE col = value";
echo $query; //output is exactly: SELECT * FROM table WHERE col = value

以同样的方式,您不会在字符串中使用;结束SQL查询,如:$query = "SELECT * FROM table WHERE col = value;";

答案 1 :(得分:0)

查询的concat示例

$query = "select * from tablename ";
$query.= "WHERE id=1";
$query.= " and item_id= 'foo'";

答案 2 :(得分:0)

尝试在代码的这一位添加一个else块,如下所示。否则$ filterQuery永远不会被设置,除非isset($ _ POST [testType1])。

if (isset($_POST[testType1])) {
   $filterQuery .= $orTrigger ."(testType1 = '1'"; 
   setOrTrigger();
   $addTestFilterQuery = getTestFilterQuery("testType1");
   if ($addTestFilterQuery != NULL) {
    $filterQuery .= "AND " .$addTestFilterQuery;
   }
   $filterQuery .= ") ";
} else {
   $filterQuery = $query;
}

答案 3 :(得分:0)

这个问题最终演变成一个完全不同的问题。问题出在POST方法和谷歌浏览器上。有关详细信息,请随时查看修订后的问题和答案。 Problem with $_POST, if isset() and mysql_fetch_assoc(): echo returns correct value, page source always returns else value