Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php laravel 5.5雄辩的查询生成器在使用查询字符串存储url时生成错误的查询_Php_Mysql_Laravel - Fatal编程技术网

Php laravel 5.5雄辩的查询生成器在使用查询字符串存储url时生成错误的查询

Php laravel 5.5雄辩的查询生成器在使用查询字符串存储url时生成错误的查询,php,mysql,laravel,Php,Mysql,Laravel,我有一个雄辩的模型,包含url和data,以及其他标准的laravel字段 那么我会: $cache = new \App\Cache(); $cache->url = $this->url; $cache->data = json_encode($data); $cache->save(); 当url没有查询字符串时,它工作正常,但当url有查询字符串时,laravel生成错误的查询,例如: 原始数据:

我有一个雄辩的模型,包含
url
data
,以及其他标准的laravel字段

那么我会:

        $cache = new \App\Cache();
        $cache->url = $this->url;
        $cache->data = json_encode($data);
        $cache->save();
url
没有查询字符串时,它工作正常,但当
url
有查询字符串时,laravel生成错误的查询,例如:

原始数据:

$this->url = 'https://some-url.com?param1=val1&param2=val2';
$data = ['some' => 'long', 'json' => 'data'];
转向:

insert into `cache` (`url`, `data`, `updated_at`, `created_at`) 
values (
    https://some-url.com{"some":"long","json":"data"}param1=val1&param2=val2, 
    2019-01-07 07:38:15, 
    ?, 
    ?
)
如您所见,编码的json放在错误的位置(在查询字符串的
上)

我做错了什么?还是这是一只虫子

注意:我使用的是mysql


更新:删除了错误字符串,因为它分散了对主要问题的注意力

我认为您应该键入将url转换为字符串,然后保存它,或者使用标准的create()方法,这样应该可以。我在我的一个项目中使用过,没有任何问题。

我相信您需要将URL像那样存储在DB中

$url_string = $this->url;
$cache->url = '{$url_string}';
这将适用于URL

您可以使用urlencode()函数。 尝试使用编码保存您的url

$cache->url = urlencode($this->url);

稍后,您可以使用urldecode()函数获得它。

结果表明,这是sql记录器上的一个错误,产生了错误的sql snipet。主要错误只是字段长度与@Sohel0415建议的数据长度不匹配


因此,记录器误导了我,使我认为生成的查询是错误的。

数据库中
url
列的大小是多少?url是字符串(191),数据是长文本,json应该指向数据,而不是url。我想您必须增加
url
列的大小。试着这样做。太长不是问题,问题是JSON的位置。这与字段的长度无关。这是因为Laravel使用
作为查询中数据的占位符。如果没有其他选项,可能会解决此问题抱歉,这是一个错误,它确实保存了数据,但url仅保存为
“{$url}”