Ifadesi mevcut NEREDE zaman PHP MySQL başarısız

3 Cevap php

Ben küçük bir MYSQL tablo basit bir sorgu yapmak için çalışıyorum, ama ben nerede tümcesi eklediğinizde, aniden (bir while(mysql_fetch_array ){} yerde olmadan çalışırken eklendi) geçersiz sorgu hata alıyorum. MYSQL konsol, ancak ben MYSQL belgeleri kontrol ve ben bildiğim kadarıyla belirleyebilirsiniz gibi uygun sözdizimi kullanıyorum, 1064 (sözdizimi) hatası veriyor.

<?php
$ind=rand(1,3);
$quote=Null;
$sign=Null;
$afil=Null;
$con=mysql_connect(localhost,root,********);//connect to database
mysql_select_db("phone_site",$con);//select table
$query="SELECT * FROM quotes WHERE index=$ind";//get the row for that index
$data=mysql_query($query);
//print out text
print ("<p id=\"quote\">" . $data['quote'] . "</p>");
print ("<p id=\"ename\">" . $data['sign'] . "</p>");
print ("<p id=\"afill\">--  " . $data['afil'] . "</p>");
mysql_close($con);//close connection
?>

Herkes sorunun ne olduğunu biliyor musun? Ben XAMPP kullanıyorum. Onun MYSQL ile yanlış bir şey var mı?

3 Cevap

INDEX MySQL en biridir Reserved Words,

Certain words such as SELECT, DELETE, or BIGINT are reserved and require special treatment for use as identifiers such as table and column names. This may also be true for the names of built-in functions.

Reserved words are permitted as identifiers if you quote them as described in Section 8.2, “Schema Object Names”

Eğer adının bu tür bir sütun varsa, sütun adını alıntı olmalıdır - bkz Schema Object Names:

The identifier quote character is the backtick (“`”)

Hangi sorgu bu gibi görünmelidir anlamına gelir:

$query="SELECT * FROM quotes WHERE `index`=$ind";


To complete my answer, after seeing dustmachine's one, who said :

I'm a little surprised that it didn't complain when the table was created.

Ben masa phpMyAdmin veya MySQL Workbench gibi bazı aracı ile oluşturulan olmuştur varsayalım; ve bu generaly (always, for some) alıntı sütun adları, sorun bu tür önlemek için.


Edit after the comment : I didn't see, but you are using this kind of code :

$data=mysql_query($query);
print ("<p id=\"quote\">" . $data['quote'] . "</p>");

mysql_query function diretly verileri dönmez: bu sadece bir "Ressource" döndürür (quoting the manual's page):

The returned result resource should be passed to mysql_fetch_array(), and other functions for dealing with result tables, to access the returned data.

Değil tüm sorunları (nothing being displayed, not even the raw HTML tags is odd) çözebiliriz, ama en azından biraz yardımcı olabilir emin ...

Özel anlamı ile o bir reserved word ve bir sütun adı olarak kullanılmamalıdır - Ben sorun sözcüğü index kullanımı olduğunu düşünüyorum. Ben tablo oluşturulduğu zaman şikayet etmedi biraz şaşırdım.

Bu deneyin, bu benim için çalışıyor:

$query="SELECT * FROM quotes WHERE index='$ind'";