2013-07-13 13 views
9

Vorrei utilizzare la classe DB di laravel per eseguire una query mysql ma nessuna delle funzioni fornite da Laravel funziona.Laravel 4 non può eseguire query RAW intere

Nessuno di quelli funziona: DB :: statment()/DB :: select()/DB :: raw()/DB :: update()/DB :: select (DB :: raw())

ecco il codice vorrei interrogare:

DROP TABLE users; 

CREATE TABLE `users` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `u_username` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `u_email` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `password` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `u_regdate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `u_birthday` date NOT NULL DEFAULT '0000-00-00', 
    `u_lastlogin` int(11) NOT NULL, 
    `u_logcout` int(11) NOT NULL DEFAULT '0', 
    `u_level` tinyint(1) NOT NULL DEFAULT '0', 
    `u_language` tinyint(1) NOT NULL DEFAULT '0', 
    `u_status` tinyint(1) NOT NULL DEFAULT '0', 
    `u_gender` tinyint(1) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

INSERT INTO users VALUES("1","admin","[email protected]","$2y$08$9sBJh7iyF9Yr6xvsieNmBOsotGPBkZFydVjb/Yk5Fzh4IGBVo7Je6","0000-00-00 00:00:00","0000-00-00","0","0","9","0","0","0"); 
INSERT INTO users VALUES("2","moderator","[email protected]","$2y$08$15/tIKPM/8gATSzkmey5tuAA/PL4lJeFq7liTETyz0h1dkOotwp3G","0000-00-00 00:00:00","0000-00-00","0","0","0","0","0","0"); 
INSERT INTO users VALUES("3","helper","[email protected]","$2y$08$nTtZU9/UBeRLbYJRO/XwCe2D/B57ofx2bCN8vGEiHkqO.bPra0WT6","0000-00-00 00:00:00","0000-00-00","0","0","0","0","0","0"); 
INSERT INTO users VALUES("4","dude12","[email protected]","$2y$08$y0JweKtWxJFRF7Ko8q0zkODY.EWEKJ.CR1dDco6aCJh8ssKdzQ6RC","0000-00-00 00:00:00","0000-00-00","0","0","0","0","0","0"); 
INSERT INTO users VALUES("5","girl1","[email protected]","$2y$08$UKjJzxDuYW7upqeLsm1VOOo2jUoqMaai0/1jFxvLDzC6eWjin3yOe","0000-00-00 00:00:00","0000-00-00","0","0","0","0","0","0"); 

ho guardato e metodi da questi due argomenti anche provato, ma niente sta funzionando:

cannot-run-raw-query-in-laravel-4

laravel-4-how-to-run-a-raw-sql

Errore restituito durante l'esecuzione di "DB :: selezionare (DB :: grezzo ($ query))" o DB :: dichiarazione:

SQLSTATE[42000]: Syntax error or access violation: 1064 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 'CREATE TABLE `users` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT, `u_use' at line 3 (SQL: DROP TABLE users; CREATE TABLE `users` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT, `u_username` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `u_email` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `password` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `u_regdate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `u_birthday` date NOT NULL DEFAULT '0000-00-00', `u_lastlogin` int(11) NOT NULL, `u_logcout` int(11) NOT NULL DEFAULT '0', `u_level` tinyint(1) NOT NULL DEFAULT '0', `u_language` tinyint(1) NOT NULL DEFAULT '0', `u_status` tinyint(1) NOT NULL DEFAULT '0', `u_gender` tinyint(1) NOT NULL DEFAULT '0', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; INSERT INTO users VALUES("1","admin","[email protected]","$2y$08$9sBJh7iyF9Yr6xvsieNmBOsotGPBkZFydVjb/Yk5Fzh4IGBVo7Je6","0000-00-00 00:00:00","0000-00-00","0","0","9","0","0","0"); INSERT INTO users VALUES("2","moderator","[email protected]","$2y$08$15/tIKPM/8gATSzkmey5tuAA/PL4lJeFq7liTETyz0h1dkOotwp3G","0000-00-00 00:00:00","0000-00-00","0","0","0","0","0","0"); INSERT INTO users VALUES("3","helper","[email protected]","$2y$08$nTtZU9/UBeRLbYJRO/XwCe2D/B57ofx2bCN8vGEiHkqO.bPra0WT6","0000-00-00 00:00:00","0000-00-00","0","0","0","0","0","0"); INSERT INTO users VALUES("4","dude12","[email protected]","$2y$08$y0JweKtWxJFRF7Ko8q0zkODY.EWEKJ.CR1dDco6aCJh8ssKdzQ6RC","0000-00-00 00:00:00","0000-00-00","0","0","0","0","0","0"); INSERT INTO users VALUES("5","girl1","[email protected]","$2y$08$UKjJzxDuYW7upqeLsm1VOOo2jUoqMaai0/1jFxvLDzC6eWjin3yOe","0000-00-00 00:00:00","0000-00-00","0","0","0","0","0","0");) (Bindings: array ()) 
+0

puoi mostrare l'errore che sta dando mentre excuting la query con la classe DB? –

+0

aggiunto l'errore restituito alla domanda principale. quando provo a eseguire la query con phpmyadmin, funziona perfettamente –

risposta

25

l'esecuzione di codice SQL proprio come quello che ho fornito in questione possono essere eseguiti utilizzando

DB::unprepared($code); 

Spero che questo aiuta le persone con lo stesso problema che avevo: D

Answer found while looking through laravel issues

+0

@OmerM. Come stai incorporando la classe DB nel tuo sistema. Hai creato un modello o chiamato direttamente nel controller? – Volatil3

+1

@ Volatil3 Per questo progetto ho usato la classe DB in una classe di comando PHP. Volevo creare un comando artisan che potessi usare per esportare e importare il mio db. Puoi usare la DB Class ovunque nel tuo intero Progetto. Nel tuo controller o nel tuo modello. –

2

eliminare la tabella utenti dal database quindi provare questo e mi ha lasciato sapere se funziona o no:

DB::insert('CREATE TABLE `users` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `u_username` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `u_email` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `password` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `u_regdate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `u_birthday` date NOT NULL DEFAULT '0000-00-00', 
    `u_lastlogin` int(11) NOT NULL, 
    `u_logcout` int(11) NOT NULL DEFAULT '0', 
    `u_level` tinyint(1) NOT NULL DEFAULT '0', 
    `u_language` tinyint(1) NOT NULL DEFAULT '0', 
    `u_status` tinyint(1) NOT NULL DEFAULT '0', 
    `u_gender` tinyint(1) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci'); 

//and so on for all the other queries. 
+0

DB: la query non esiste in laravel 4, quindi ho usato DB :: insert e ha funzionato. Immagino che l'esecuzione di più query contemporaneamente non sia possibile ma eseguirle una ad una sta funzionando –

+0

sì che è corretto è necessario eseguire la query singolarmente e grazie per aver parlato della DB :: query non esistente in laravel 4.I cambierà la risposta come tale con insert() –

+1

Appena scoperto c'è una funzione per l'esecuzione di codice mysql raw: DB :: unprepared ($ code); https://github.com/laravel/framework/pull/54 –

2

Che dire di questo codice? Trovo abbastanza utile usare migrations & db seeding - soprattutto per la distribuzione.

Schema::create('users', function($table){ 
    $table->increments('id'); 
    $table->string('u_username'); 
    $table->string('u_email'); 
    $table->string('password'); 
    $table->datetime('u_regdate'); 
    $table->date('u_birthday'); 
    $table->integer('u_lastlogin'); 
    $table->integer('u_logcout')->default(0); 
    $table->tinyinteger('u_level')->default(0); 
    $table->tinyinteger('u_language')->default(0); 
    $table->tinyinteger('u_status')->default(0); 
    $table->tinyinteger('u_gender')->default(0); 
}); 


// Repeat this for other users as well 
User::create([ 
    'u_username' =>  'admin', 
    'u_email' =>  '[email protected]', 
    'password' =>  Hash::make('users-password'), 
    'u_regdate' =>  date('Y-m-d H:i:s'), 
    'u_birthday' =>  '1980-01-01', 
    'u_lastlogin' => 0, 
    'u_logcout' =>  0, 
    'u_level' =>  9, 
    'u_language' =>  0, 
    'u_status' =>  0, 
    'u_gender' =>  0, 
]);