Laravel 4 无法运行整个 RAW 查询

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/17630490/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 08:08:08  来源:igfitidea点击:

Laravel 4 cannot run whole RAW queries

phpmysqllaravellaravel-4

提问by Omer M.

I would like to use the DB class of laravel to execute a mysql query but none of the functions provided by Laravel are working.

我想使用 Laravel 的 DB 类来执行 mysql 查询,但 Laravel 提供的功能都不起作用。

None of those is working: DB::statment() / DB::select() / DB::raw() / DB::update() / DB::select(DB::raw())

这些都不起作用:DB::statment() / DB::select() / DB::raw() / DB::update() / DB::select(DB::raw())

Here is the code I would like to query:

这是我要查询的代码:

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]","ysBJh7iyF9Yr6xvsieNmBOsotGPBkZFydVjb/Yk5Fzh4IGBVo7Je6","0000-00-00 00:00:00","0000-00-00","0","0","9","0","0","0");
INSERT INTO users VALUES("2","moderator","[email protected]","y/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]","y$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]","y$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]","y$UKjJzxDuYW7upqeLsm1VOOo2jUoqMaai0/1jFxvLDzC6eWjin3yOe","0000-00-00 00:00:00","0000-00-00","0","0","0","0","0","0");

I have looked and tried methods from those two topics too but nothing is working:

我也查看并尝试了这两个主题的方法,但没有任何效果:

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

无法运行原始查询 in-laravel-4

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

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

Error returned when executing with "DB::select( DB::raw($query) )" or DB::statement :

使用“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","[email protected]","ysBJh7iyF9Yr6xvsieNmBOsotGPBkZFydVjb/Yk5Fzh4IGBVo7Je6","0000-00-00 00:00:00","0000-00-00","0","0","9","0","0","0"); INSERT INTO users VALUES("2","moderator","[email protected]","y/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]","y$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]","y$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]","y$UKjJzxDuYW7upqeLsm1VOOo2jUoqMaai0/1jFxvLDzC6eWjin3yOe","0000-00-00 00:00:00","0000-00-00","0","0","0","0","0","0"); ) (Bindings: array ( ))

回答by Omer M.

Executing SQL Code just like the one I provided in the question can be executed using

像我在问题中提供的那样执行 SQL 代码可以使用

DB::unprepared( $code );

I hope this helps the people with the same issue i had :D

我希望这对我遇到同样问题的人有所帮助:D

Answer found while looking through laravel issues

在查看 Laravel 问题时找到的答案

回答by saran banerjee

Drop the users table from database then try this and let me know whether it works or not:

从数据库中删除 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.

回答by Andreyco

What about this code? I find it pretty usefull to use migrations & db seeding- especialy for deployment.

这段代码呢?我发现使用迁移和数据库播种非常有用- 特别是用于部署。

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,
]);