我想使用laravel的DB类来执行mysql查询,但是Laravel提供的所有函数都没有工作。
这些都不起作用:DB :: statment()/ DB :: select()/ DB :: raw()/ DB :: update()/ DB :: select(DB :: raw())< / p>
以下是我想查询的代码:
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","admin@example.com","$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","mod@example.com","$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","help@example.com","$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","dude@example.com","$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","girl@example.com","$2y$08$UKjJzxDuYW7upqeLsm1VOOo2jUoqMaai0/1jFxvLDzC6eWjin3yOe","0000-00-00 00:00:00","0000-00-00","0","0","0","0","0","0");
我已经查看并尝试了这两个主题的方法,但没有任何工作:
cannot-run-raw-query-in-laravel-4
laravel-4-how-to-run-a-raw-sql
使用“DB :: select(DB :: raw($ query))”或DB :: statement执行时返回错误:
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","admin@example.com","$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","mod@example.com","$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","help@example.com","$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","dude@example.com","$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","girl@example.com","$2y$08$UKjJzxDuYW7upqeLsm1VOOo2jUoqMaai0/1jFxvLDzC6eWjin3yOe","0000-00-00 00:00:00","0000-00-00","0","0","0","0","0","0"); ) (Bindings: array ( ))
答案 0 :(得分:25)
执行SQL代码就像我在问题中提供的那样,可以使用
执行DB::unprepared( $code );
我希望这能帮助那些遇到同样问题的人:D
答案 1 :(得分:2)
从数据库中删除users表,然后尝试这个并让我知道它是否有效:
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.
答案 2 :(得分:2)
这段代码怎么样? 我发现使用migrations & db seeding非常有用 - 特别是对于部署。
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' => 'admin@example.com',
'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,
]);