我想在我的数据库中存储一些数据,它可以带引号:
$data = 'some "quoted" text';
$id = DB::table('some_table')->insertGetId(array('data' => $data);
所以我显然在我的数据库字段中得到了屏蔽引号:
some \"quoted\" text
我试图根据Laravel 4文档来避免它:
$id = DB::table('some_table')->insertGetId(array('data' => DB::raw($data));
但它会增加语法错误SQLSTATE[42000]
。
我哪里错了?
答案 0 :(得分:2)
你无法“避免”转义字符串文字。
mysql字符串文字用单引号或双引号表示。因此,如果没有mysql具有转义字符,则无法使用包含其内部字符的字符串。有一个varbinary类型,但我不认为这是你应该看到的。话虽如此,如果你发送一个转义字符,你将不会在表中看到。如果您从mysql命令行查看表并在字段中查看转义,则会发生某种转义重复。
此外,省略转义过程是SQL注入的主要引入点 - 即通过引入被解析为SQL的文本和无关引号来混淆SQL语句解析器。
Laravel的查询构建器故意隐藏所有这些细节,这就是它应该的样子。
但是,你应该研究一件事 - 这就是magic_quotes_gpc的设置。你应该确保没有启用它,因为它会自动在所有输入上运行addslashes,并且可以产生双引号。
我不清楚问题的提出方式,问题究竟是什么。 Laravel应该透明地为您解决所有这些细节(逃避/取消)。什么是破碎的,你正试图修复?