PHP - список () запрос не работает - PullRequest
1 голос
/ 16 июня 2009

Когда я запускаю код ниже, когда $ entry = miami.com, я получаю следующее сообщение об ошибке:

SELECT COUNT(*) FROM #&*+ WHERE `site`
LIKE 'miami.com':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

Похоже, я не правильно определяю таблицу $. Есть идеи, как мне это сделать?

Заранее спасибо,

John

    $result = mysql_query("SHOW TABLES FROM feather") 
or die(mysql_error()); 


while(list($table)= mysql_fetch_row($result))
{
  $sqlA = "SELECT COUNT(*) FROM $table WHERE `site` LIKE '$entry'";
  $resA = mysql_query($sqlA) or die("$sqlA:".mysql_error());
  list($isThere) = mysql_fetch_row($resA);
  if ($isThere)
  {
     $table_list[] = $table;
  }
}

Ответы [ 6 ]

1 голос
/ 16 июня 2009

На самом деле, я недавно вспомнил, что мой первое имя таблицы действительно "# & * +." Я добавил это сознательно во время развитие

И вам интересно, почему ваш SQL не работает? :)

Укажите название вашей таблицы , потому что это далеко не имя таблицы, которое можно использовать буквально.

Что-то вроде

"SELECT COUNT(*) FROM \"$table\" ...
1 голос
/ 16 июня 2009

Я думаю, что вы используете конструкцию языка списка неправильно:

Описание

void list ( mixed $varname [, mixed $... ] )

Как и array () , на самом деле это не функция, а языковая конструкция. list () используется для> назначения списка переменных в одной операции.

Пример:

$info = array('coffee', 'brown', 'caffeine');

// Listing all the variables
list($drink, $color, $power) = $info;
echo "$drink is $color and $power makes it special.\n";

Теперь вы пытаетесь выбрать динамические имена таблиц (кажется). Вам не нужно использовать функцию list, поскольку вы можете получить доступ к результату как массив (вы можете определить соответствующие индексы интересующего вас массива и назначить их только, но я думаю, что массив доступ намного понятнее):

while($row = mysql_fetch_assoc($result))
{
  $sqlA = "SELECT COUNT(*) FROM ${row['table']} WHERE `site` LIKE '$entry'";
  [...]
}

Мне немного любопытно, все ли таблицы в вашей базе данных пера содержат столбец с именем site ? В противном случае этот запрос не будет выполнен, независимо от того, как вы форматируете или изменяете код.

1 голос
/ 16 июня 2009

если бы я отлаживал, я бы увидел, что

print_r(mysql_fetch_row($result));

выходы

0 голосов
/ 16 июня 2009

Я думаю, это то, что вы ищете:

$result = mysql_query("SHOW TABLES FROM feather") or die(mysql_error()); 

while($table_row = mysql_fetch_row($result))
{
  $table = $table_row[0];
  $sqlA = "SELECT COUNT(*) FROM `" . mysql_escape_string($table) . "` WHERE `site` LIKE '" . mysql_escape_string($entry) . "'";
  $resA = mysql_query($sqlA) or die("$sqlA:".mysql_error());
  $isThere_row = mysql_fetch_row($resA);
  $isThere = $isThere_row[0];
  if ($isThere)
  {
     $table_list[] = $table;
  }
}

ПРИМЕЧАНИЕ: переменные внутри вашего sql должны быть экранированы. Я не использую mySQL, но предполагаю, что mysql_escape_string должен работать. Есть еще одна функция, mysql_real_escape_string, которая может быть более подходящей. Вы можете прочитать документы для этого.

0 голосов
/ 16 июня 2009

Я почти уверен, что ваш запрос SHOW TABLES возвращает мусор. Я смог воспроизвести вашу проблему, скопировав существующий файл table_name.frm в # & @. Frm в папке данных для локальной базы данных. Убедитесь, что ваша база данных не повреждена (значит, попробуйте восстановить): http://dev.mysql.com/doc/refman/5.1/en/repair-table.html

0 голосов
/ 16 июня 2009

я думаю, что нужно добавить MYSQL_ASSOC чтобы строка, которая делает цикл

mysql_fetch_row ($ результат, MYSQL_ASSOC)

по умолчанию: MYSQL_BOTH

что означает, что в цикле php вы получаете запись имени таблицы, и запись индекса, как 0,1,2, ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...