记(Laravel)PDO 使用prepared statement 预处理LIMIT等字段遇到的坑。_此用户未找到的博客-CSDN博客


本站和网页 https://blog.csdn.net/u013785951/article/details/75339965 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

记(Laravel)PDO 使用prepared statement 预处理LIMIT等字段遇到的坑。_此用户未找到的博客-CSDN博客
记(Laravel)PDO 使用prepared statement 预处理LIMIT等字段遇到的坑。
此用户未找到
于 2017-07-19 10:24:12 发布
4549
收藏
分类专栏:
laravel
php
文章标签:
php
pdo
larav
预处理
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013785951/article/details/75339965
版权
laravel
同时被 2 个专栏收录
5 篇文章
0 订阅
订阅专栏
php
13 篇文章
0 订阅
订阅专栏
以下说明基于PHP7.1版本,Laravel 5.2版本。
直接贴代码:
$sql = " SELECT id
from my_table
LIMIT ?,?
";
$tests = DB::select($sql, [$offset, $limit]);
Laravel 5.2版本,默认 ATTR_EMULATE_PREPARES设置为true. 在文件 Illuminate/Database/Connectors/Connector.php 24行.
class Connector
use DetectsLostConnections;
/**
* The default PDO connection options.
* @var array
*/
protected $options = [
PDO::ATTR_CASE => PDO::CASE_NATURAL,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL,
PDO::ATTR_STRINGIFY_FETCHES => false,
PDO::ATTR_EMULATE_PREPARES => true,
];
由于一些驱动不支持原生的预处理语句,PDO可以完全模拟预处理。 同时,PDO的模拟预处理是默认打开的,并且,laravel对PDO的配置也是默认打开的.
即便MYSQL驱动本身支持预处理,在默认打开的状态下,PDO是不会用到MYSQL本身提供的预处理功能。
坑在这里:
PDO会把SQL语句进行模拟预处理之后会发送给MYSQL一个原始的SQL语句。
这种方式很诡异的是如果预处理的SQL语句中需要处理的字段不是表中的字段时,PDO会对绑定的参数
无脑添加单引号
无脑添加单引号
无脑添加单引号
因而导致了异常或查询不到结果。 即:
limit '0','1'
解决这种问题的方法是设置PDO不去模拟预处理,而是交给MYSQL本身去做。方法是设置PDO的参数 ATTR_EMULATE_PREPARES 为 false Laravel 中是在 config/database.php
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
'options' =>[
PDO::ATTR_EMULATE_PREPARES => false,
],
此用户未找到
关注
关注
点赞
收藏
打赏
评论
记(Laravel)PDO 使用prepared statement 预处理LIMIT等字段遇到的坑。
以下说明基于PHP7.1版本,Laravel 5.2版本。直接贴代码: $sql = " SELECT id from my_table LIMIT ?,? "; $playInfos = DB::select($sql, [$offset, $limit]);Laravel 5.2版本,默认 ATTR_EMULATE_
复制链接
扫一扫
专栏目录
laravel打印sql语句_采用PHP预处理防御SQL注入
weixin_39869791的博客
11-26
229
前言当我们需要编写一个根据用户输入进行查询反馈的网页时,首先是如何构建一个能够满足用户查询要求的SQL语句;其次,则需要考虑如何防御SQL注入。如何防御SQL注入关系到整个数据库,乃至服务器的安全,所以是一个不用忽视的问题,也是这篇文章所要论述的重点。文章接下来的讲述将会以PHP + MySQL的组合进行举例说明。利用字符串构造SQL语句很多同学在初次编写调用数据库相关的程序时,第一直觉采用的就是...
记一次生产中使用CompletableFuture遇到的坑
最新发布
天道酬勤
11-17
108
记一次生产中使用CompletableFuture遇到的坑
参与评论
您还未登录,请先
登录
后发表或查看评论
mysql之修改sql_mode
热门推荐
守护者ly的专栏
08-12
6万+
一 ERR 1067引发的血案
今天在Navicat中运行sql语句创建数据表出现了错误Err 1067。而这条语句在有些同事的mysql上是正确的,但是在有些人那里就报错。
原因竟然是timestamp的默认值不正确。
查阅资料得知,mysql5.7版本中有了一个STRICT mode(严格模式),而在此模式下默认是不允许设置日期的值为全0值的,所以想要解
学习笔记-关于PDO的一些事
人饭子的博客
11-09
162
PDO主要是这个选项
PDO::ATTR_EMULATE_PREPARES => false
image-20220622131618003
这个选项涉及到PDO的”预处理”机制:因为不是所有数据库驱动都支持SQL预编译,所以PDO存在”模拟预处理机制”。如果说开启了模拟预处理,那么PDO内部会模拟参数绑定的过程,SQL语句是在最后execute()的时候才发送给数据库执行;如果我这里设...
laravel SQL查询语句
hechenhongbo的博客
09-24
1196
模型中写好对应关系,如下:
public function partners()
return $this->hasOne('App\PartnersDesc', 'partner_id', 'partner_id');
控制器中写如下:
$product = Product::with(['partners' => function($query) {
$query->select('partner_name', 'partner_short_n
laravel查看sql语句
leedaning的专栏
12-21
1万+
方法一:我们有时候想测试一段代码生产的 SQL 语句,比如: 我们想看 App\User::all(); 产生的 SQL 语句,我们简单在 routes.php 做个实验即可://app/Http/routes.phpRoute::get(‘/test-sql’, function() {DB::enableQueryLog();$user = App\User::all();return resp
laravel原生sql操作以及like模糊查询的坑点
大唐锦绣的博客
09-20
4672
此篇文章基于
laravel版本:5.5
laravel基于DB的原生查询可以使用 DB facade 运行查询。DB facade 为每种类型的查询提供了方法:select、update、insert、delete 和 statement。以下是知识点:
(1)运行查询语句
$users = DB::select('select * from users where active =...
limit prepareStatement报错
滕青山博客
01-28
179
我正在用Java编写代码,我想每次在MySQL表的下一行运行此代码,第二次运行此代码.
String timh1 = "1";
String timh2 = "2";
PreparedStatement st = null;
String sqlGrammes = "SELECT SURNAME ,KATHGORIA, AFM , NAME FROM EMPLOYEE LIMIT ?,? ";
try {
st = connection.prepareStatement(sqlGramme.
laravel学习笔记--数据库篇
小信的博客
08-20
249
执行原生 SQL
执行原生SQL语句还是非常少用的,一般都是用构造器
执行原生 SQL 查询
$users = DB::select('select * from users where id = ?', [1]);
使用命名绑定
除了使用 ? 表示参数绑定外,你还可以使用命名绑定的形式来执行一个查询
$users = DB::select('select * from users where id = :id', ['id' => 1]);
执行普通语句
有些数据库语句不会有任何返回值。对于这些
laravel mysql pdo_PHP 数据库统一处理 API —— PDO 扩展及其在 Laravel 底层的使用
weixin_42485891的博客
01-27
405
PHP 数据库统一处理 API —— PDO 扩展及其在 Laravel 底层的使用由 学院君 创建于3年前, 最后更新于 1年前版本号 #316230 views13 likes0 collectsPHP 支持多种数据库,如 MySQL、PostgreSQL、SQLite 和 Oracle 等,并且这些数据库都提供了用于 PHP 和相应数据库之间通信的扩展,如 mysqli、sqlite3 等。...
PDO预处理--变量绑定
houzhyan-博客
03-31
3145
用绑定变量 SQL时,客户端向服务器发送了一个 SQL语句的原型,服务器端收到了这个 SQL语句“框架”后,经过解析、预处理、生成并存储该部分的执行计划,然后返回给客户端一个句柄,之后每次执行这类查询,都应使用这个句柄,之后的每次查询,只需要发送某些变量的值就可以了。
这样看来,当一次会话中要执行多次类似的SQL时,使用绑定变量 SQL是更高效的,因为在 MySQL服务器端,只需要解析一次
laravel 调试mysql_laravel 开启sql调试
weixin_34355933的博客
01-19
265
打开app\Providers\AppServiceProvider.PHP,在boot方法中添加如下内容public function boot(){//sql调试$sql_debug = config('database.sql_debug');if ($sql_debug) {DB::listen(function ($sql) {foreach ($sql->bindings as ...
laravel 执行原生sql
记录编程生活
08-16
807
1.插入数据
DB::insert('insert into test (id, name, email, password) values (?, ?, ? , ? )',[1, 'Laravel','laravel@test.com','Laravel']);
2.查询语句
$user = DB::select('select * from test where id = ?', [1]);
//我们还 可以看到在执行查询的时候使用了参数绑定,以避免SQL注入。除此之//外还可以使用命名绑
PHP laravel SQL优化
chajinglong的专栏
07-30
3366
SQL优化的态度
--Facebook做产品的时候,注重一句话,我们不求完美,我们先把产品运行起来!
其实上边的话,我也是对自己的说的,最近比较忙,闲暇时光,总结一下过去的薄弱点,不论你做什么,写什么,你总会遇到困难,总会遇到挫折,那个时候才是你真正提高的时候,绝对......是这样,当你重复做一些事情的时候,你会慢慢厌烦,慢慢的感到不满,也许你可以认为我说的不对,但是我有必要告诉
laravel 查看sql
weixin_30631587的博客
06-17
106
方法一:
我们有时候想测试一段代码生产的 SQL 语句,比如: 我们想看App\User::all();产生的 SQL 语句,我们简单在 routes.php 做个实验即可:
//app/Http/routes.php
Route::get('/test-sql', function() {
DB::enableQueryLog();
$user = ...
PHP PDO,预处理方式(PDOStatement对象)实现 增删改查。防sql注入
houyanhua1的专栏
02-26
3793
demo.php(?号式的预处理sql语句,增删改):
<?php
//?号式的预处理语句 一共有3种绑定方式
//1.连接数据库
try{
$pdo = new PDO("mysql:host=localhost;dbname=数据库名","root","密码");
}catch(PDOException $e){
die("数据库连接失败".$e->getMessage());
[原创]Laravel 启动流程
YouJiaXing的博客
07-11
1066
1. 程序启动准备
1.1 容器基础配置
1.2 核心类绑定
1.3 实例化 Http 核心类
2. 请求实例化
3. 请求处理
3.1 请求处理环境初始化
1. 环境监测 \Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables::class
2. 配置加载 \Illuminate\Foundation\Bootstrap\Lo...
Laravel--使用介绍
Iam8600的博客
11-04
3714
Laravel--使用介绍
1、简介
Laravel 应用默认的目录结构试图为不管是大型应用还是小型应用提供一个好的起点,当然,你可以自己按照喜好重新组织应用目录结构,Laravel 对类在何处被加载没有任何限制——只要 Composer 可以自动载入它们即可。
Models目录在哪里?
许多初学者都会困惑La...
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:大白
设计师:CSDN官方博客
返回首页
此用户未找到
CSDN认证博客专家
CSDN认证企业博客
码龄9年
暂无认证
134
原创
15万+
周排名
70万+
总排名
19万+
访问
等级
3171
积分
22
粉丝
20
获赞
19
评论
49
收藏
私信
关注
热门文章
简要谈谈php中mysql,mysqli,mysqlnd,pdo到底是什么.
22831
thrift TSocket read 0 bytes(string类型中的一个坑)
17042
网络爬虫技术(python)
7782
mac下连接VirtualBox虚拟机(NAT模式)
6375
服务器中的sites-available和sites-enabled的关系
5442
分类专栏
他人笔记
2篇
随时笔记
27篇
apahce
4篇
java笔记
1篇
linux
5篇
数据库
9篇
laravel
5篇
php
13篇
composer
3篇
android
1篇
github
7篇
thinkphp
3篇
python
7篇
nginx
2篇
node-js
1篇
服务器
6篇
javascrpit
css
memcache
1篇
c语言
2篇
C++
1篇
数据结构
1篇
java
2篇
jsp
mongodb
2篇
php4
1篇
git
1篇
mysql
4篇
thrift
2篇
sqlmap
1篇
item2
1篇
mysq
1篇
osx
1篇
virtualbox
1篇
sublime
1篇
ssh
网络爬虫
计算机网络
pyhton
1篇
正则表达式
1篇
python正则表达式
1篇
docker
1篇
最新评论
快速排序, 堆排序,归并排序复杂度问题。
傻必:
快排的时间复杂度是n吗?
快速排序, 堆排序,归并排序复杂度问题。
天边。眼前:
误导吗
thrift TSocket read 0 bytes(string类型中的一个坑)
cymx66688:
请问你粘贴的代码是在哪的?value = value.encode('utf8')是把这一句给注释掉吗
计算机网络五层协议——TCP协议实例图解
Kelly—zxy:
抓包是什么不断去学习探究
NGINX安装时make[1]: *** [/usr/local/pcre//Makefile] Error 127
litiammmm:
正确
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
docker实战——《第一节:给你的team小伙伴分配专有服务器》
正则表达式入门(java,python版本)
thrift TSocket read 0 bytes(string类型中的一个坑)
2017年8篇
2016年3篇
2015年137篇
2014年16篇
目录
目录
分类专栏
他人笔记
2篇
随时笔记
27篇
apahce
4篇
java笔记
1篇
linux
5篇
数据库
9篇
laravel
5篇
php
13篇
composer
3篇
android
1篇
github
7篇
thinkphp
3篇
python
7篇
nginx
2篇
node-js
1篇
服务器
6篇
javascrpit
css
memcache
1篇
c语言
2篇
C++
1篇
数据结构
1篇
java
2篇
jsp
mongodb
2篇
php4
1篇
git
1篇
mysql
4篇
thrift
2篇
sqlmap
1篇
item2
1篇
mysq
1篇
osx
1篇
virtualbox
1篇
sublime
1篇
ssh
网络爬虫
计算机网络
pyhton
1篇
正则表达式
1篇
python正则表达式
1篇
docker
1篇
目录
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
此用户未找到
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值