CREATE TABLE error după prima utilizare?

Această bucată de cod creează primul tabel fără probleme, dar aruncă "Eroare de interogare a bazei de date 2", care este eroarea pentru cea de-a doua interogare CREATE TABLE. Sintaxa pare a fi corectă, dar sunt relativ nouă la acest ...

$dbc = mysqli_connect("localhost", "$dbuser", "$dbpass") or die('Error connecting to MySQL server.');
mysqli_select_db($dbc, "autoim9_codeaic");

$content = "CREATE TABLE content (id int NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), page varchar(255), html longtext)";
mysqli_query($dbc, $content) or die('Error querying database1');

$events = "CREATE TABLE events (id int NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), name varchar(255), date varchar(255), time varchar(255), location varchar(255), html longtext, img varchar(255), link varchar(255), target varchar(255), order int)";
mysqli_query($dbc, $events) or die('Error querying database2');


$spotlight = "CREATE TABLE spotlight (id int NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), title varchar(255), img varchar(255), link varchar(255), target varchar(255), order int)";
mysqli_query($dbc, $spotlight) or die('Error querying database3');
0
Puteți găsi aceste lucruri prin inspectarea mysqli_error ($ dbc) în cazul unei erori.
adăugat autor Amadan, sursa

2 răspunsuri

date, time, and order are reserved keywords in MySQL. You either need to change their names or use backticks (`) to escape them.

$events = "CREATE TABLE events (id int NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), name varchar(255), `date` varchar(255), `time` varchar(255), location varchar(255), html longtext, img varchar(255), link varchar(255), target varchar(255), `order` int)";

FYI, dacă utilizați varchar (255) pentru fiecare câmp, probabil că faceți acest lucru greșit. Câmpurile de dată și oră au propriile tipuri de date și ar trebui folosite în consecinţă.

2
adăugat
Mulțumiri. Răspunsul a fost actualizat.
adăugat autor John Conde, sursa
Permit data/ora de formă liberă, deoarece aceste câmpuri sunt pentru retrimiterea informațiilor, nu pentru marcarea temporală.
adăugat autor user1427274, sursa
aș putea folosi "sort" în loc de comandă?
adăugat autor user1427274, sursa
DATE și TIME , deși sunt rezervate, sunt de fapt permise fără cotațiile pentru compatibilitate înapoi, deoarece acestea sunt utilizate în mod obișnuit ca nume de coloane. ORDER este problema aici.
adăugat autor Michael Berkowski, sursa
și order este de asemenea rezervat
adăugat autor Aaron W., sursa

"Ordinul" este un cuvânt rezervat, deci trebuie să introduceți în cătușe înapoi (sau, de preferință, alegeți un nume de câmp ușor diferit).

Deci, de fapt, este o eroare în SQL.

1
adăugat
PHP România, Moldova
PHP România, Moldova
173 participanți

Vorbim despre Yii, Laravel, Symphony, MySQL, PgSQL, WP, OpenCart... Pentru confort, opriți notificările. Parteneri: https://ciupacabra.com @js_ro @node_ro @python_ro @seo_ro @Romania_Bot Offtop: @holywars_ro Joburi: @php_job @Grupuri_IT

MySQL - comunitatea Română
MySQL - comunitatea Română
19 participanți

Comunitatea română a programatorilor MySQL.