PHP - list () sorgu çalışmıyor

6 Cevap php

Ben aşağıdaki kodu çalıştırdığınızda zaman $ entry = miami.com, ben aşağıdaki hata iletisini alabilirsiniz:

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

Ben doğru $ tablo tanımlama yapmıyorum gibi görünüyor. Ben bunu nasıl Herhangi bir fikir?

Teşekkür peşin,

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 Cevap

benim gördüğüm olacağını ayıklama olsaydı ne

print_r(mysql_fetch_row($result));

çıkışlar

Sana list-language construct yanlış kullanıyorsunuz düşünüyorum:

Description

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

Gibi array(), bu gerçekten bir işlev değil, bir dil oluşumudur. list() bir operasyonda değişkenlerin listesini atamak> için kullanılır.

Örnek:

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

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

Şimdi, ne yapmaya çalışıyorsun dinamik tablo adları (öyle görünüyor) almak için. Eğer access the result as an array (sen ilgilenen ve onları sadece atamak dizinin uygun indeksleri tanımlayabilirsiniz, ama ben dizi erişimi çok daha net olduğunu düşünüyorum) olabilir beri, liste işlevini kullanmanız gerekmez :

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

Gerçi biraz merak ediyorum, sizin veritabanındaki TÜM tabloları feather adında bir sütun var mı site? Aksi takdirde bu sorgu olursa olsun biçimlendirmek veya kodunuzu nasıl başarısız olur.

Actually, I recently recalled that my very first table name is indeed "#&*+." I added it deliberately during development

SQL neden başarısız ve merak ediyorsanız? :)

Bu bir anlamıyla kullanılabilir uzak bir tablo adı tarafından Quote your table name çünkü.

Gibi bir şey

"SELECT COUNT(*) FROM \"$table\" ...

i think need to add MYSQL_ASSOC to line that do the loop

mysql_fetch_row ($ sonuç, MYSQL_ASSOC)

varsayılan: MYSQL_BOTH

what mean that in the php loop you get the entry of the table name , and the entry of index like 0,1,2,...

Ben senin SHOW TABLOLAR sorgu çöp dönen eminim. Ben yerel bir veritabanı için veri klasörü içerisinde ve @. Frm varolan table_name.frm kopyalayarak sorunu yeniden mümkün oldu. (Tamir deneyin, yani) emin veritabanı bozuk olmadığından emin olun: http://dev.mysql.com/doc/refman/5.1/en/repair-table.html

Ben bu ne peşinde olduğunu düşünüyorum:

$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;
  }
}

NOT: SQL içinde değişkenleri öncelenmesi gerekir. Ben mySQL kullanmak istemiyorum ama ben mysql_escape_string çalışması gerekir varsayıyorum. Daha appropropriate olabilecek başka bir işlevi, mysql_real_escape_string vardır. Bunun için dokümanlar okumak isteyebilirsiniz.