Строка запроса с переменной переменной MySQL работает нормально в phpMyAdmin, но не в скрипте PHP - PullRequest
0 голосов
/ 12 апреля 2011

ОБНОВЛЕНО 14/04/2011

Все еще в беде.Я сократил свой код до его простейшей формы.Я использую функцию IF, чтобы проверить isset () для флажка, который работает нормально.Если флажок установлен, он объединяет строку, состоящую из двух частей.Очень просто.

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

Когда я использую mysql_fetch_assoc и отображаю информацию в $ строках, это работает.Но когда я просматриваю исходный код страницы в Google Chrome, он говорит: 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 к строке.Безуспешно.

ОБНОВЛЕНО 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'];
}

Когда я повторяю запрос $, я получаю:

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 ]

1 голос
/ 12 апреля 2011

Вы действительно помещаете двойные кавычки в строку, например:

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

Если это так, вам нужно удалить " s изнутри строки, 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;";

0 голосов
/ 25 апреля 2011

Этот вопрос в конечном итоге превратился в совершенно другой. Проблема была с методом POST и Google Chrome. Для более подробной информации см. Уточненный вопрос и ответ здесь. Проблема с $ _POST, если isset () и mysql_fetch_assoc (): echo возвращает правильное значение, источник страницы всегда возвращает другое значение

0 голосов
/ 17 апреля 2011

попробуйте добавить блок 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;
}
0 голосов
/ 12 апреля 2011

пример concat для запроса

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