• 关于

    执行php语句

    的搜索结果

问题

PHP怎么能判断加了for update查询的mysql语句是否锁表了,如果锁表延时2秒呢?

小旋风柴进 2019-12-01 20:09:03 1069 浏览量 回答数 1

回答

mysql_query的返回值,根据sql语句可能有不同。PHP:mysql_query - Manualmysql_query() 仅对 SELECT,SHOW,EXPLAIN 或 DESCRIBE 语句返回一个资源标识符,如果查询执行不正确则返回 FALSE。对于其它类型的 SQL 语句, mysql_query() 在执行成功时返回TRUE,出错时返回 FALSE。非 FALSE 的返回值意味着查询是合法的并能够被服务器执行。这并不说明任何有关影响到的或返回的行数。很有可能一条查询执行成功了但并未影响到或并未返回任何行。对于你说的INSERT语句,在成功后应该是返回TRUE的,在失败的时候才是返回FALSE,执行你的else部分。对于你第二个比较语句,先假设你的$DB就是一个bool值,实际发生的过程是,将0转换成为了bool值(应该是FALSE),而TRUE>FALSE,因此当你的$DB是TRUE的情况下大于0成立。但是你这样的判断方法是极其不合理的。判断mysql_query()是否执行成功,应该使用严格 $rst !== false而当成功返回后,判断mysql_query()影响的行数,应该对相应的sql语句类型使用mysql_num_rows()或mysql_affected_rows()来查看。建议多看下手册。

落地花开啦 2019-12-02 02:50:36 0 浏览量 回答数 0

回答

PHP自带了MySQL驱动 mysqlnd,Ubuntu可以使用apt-get安装php5-mysqlnd这个包获取mysql和mysqli扩展的支持,但注意 从PHP5.5开始已经不再支持mysql扩展,建议使用mysqli扩展,另外还可以使用mysqli_stmt绑定参数执行预查询语句,既能有效避免SQL注入提高安全性,又能提高SQL执行效率,一举两得:查询仅需解析(或预处理)一次,但可以用相同或不同的参数执行多次。当查询准备好后,数据库将分析、编译和优化执行该查询的计划。对于复杂的查询,此过程 要花费较长的时间,如果需要以不同参数多次重复相同的查询,那么该过程将大大降低应用程序的速度。通过使用预处理语句,可以避免重复分析/编译/优化周期。简言之,预处理语句占用更少的资源,因而运行得更快。提供给预处理语句的参数不需要用引号括起来,驱动程序会自动处理。如果应用程序只使用预处理语句,可以确保不会发生SQL 注入。(然而,如果查询的其他部分是由未转义的输入来构建的,则仍存在 SQL 注入的风险)。

小旋风柴进 2019-12-02 02:03:24 0 浏览量 回答数 0

阿里云试用中心,为您提供0门槛上云实践机会!

0元试用32+款产品,最高免费12个月!拨打95187-1,咨询专业上云建议!

问题

为何不能用IF语句直接判断mysql_query函数的返回值?

落地花开啦 2019-12-01 20:02:11 1005 浏览量 回答数 1

问题

PHP如何判断INSERT是否插入成功?

落地花开啦 2019-12-01 20:02:05 1100 浏览量 回答数 1

问题

PHP和MySql对NULL的处理

蛮大人123 2019-12-01 19:48:27 1252 浏览量 回答数 1

问题

mysql中字符串类型可以自动转为其它类型吗

蛮大人123 2019-12-01 19:49:23 989 浏览量 回答数 1

问题

mysql事务中两条sql语句外键约束的问题

落地花开啦 2019-12-01 19:53:47 1566 浏览量 回答数 1

问题

sql语句成功改变行数却为0

蛮大人123 2019-12-01 19:52:12 1159 浏览量 回答数 1

回答

1.首先是确定,你能不能用php正常的连接上mysql. 2.执行查询,看下能不能查询出数据。3.如果上面两步都正确,执行一条简单的插入语句,看能不能执行 如 :sql='insert into test values('XXXX', ...)';如果这个都不能执行,就是权限等的问题了。4.试着去拼sql,echo出拼出的sql,拿到你的控制台去运行,找到拼接错误的地方。5.重复第4步,直到拼出正常的可运行的sql语句。

落地花开啦 2019-12-02 01:45:46 0 浏览量 回答数 0

回答

通过搜索找到了这篇文章。我在下面粘贴了相关文本。 这是一个论坛帖子,其中显示了准备好的语句的示例,可让您将变量值分配给limit子句: http://forums.mysql.com/read.php?98,126379,133966#msg-133966 但是,我认为该错误应该引起注意,因为我无法想象过程中的准备好的语句将允许进行任何过程编译时优化。我感觉到准备好的语句是在过程的运行时编译和执行的,这种概率对效率有负面影响。如果limit子句可以接受常规过程变量(例如,过程参数),则数据库仍可以在过程中对其余查询执行编译时优化。这可能会更快地执行该过程。我不是专家。来源:stack overflow

保持可爱mmm 2020-05-11 16:00:38 0 浏览量 回答数 0

回答

<?php echo get_stylesheet_uri(color/ + color + .css');?>"(错误代码) 错误是PHP代码先执行,而你把后执行的JS中的COLOR变量写入PHP语句中了,所以在PHP语句中根本得不到正确的COLOR值,自然找不到正确的CSS。 换成:"<?php echo get_stylesheet_uri();?>color/"+ color + ".css" 具体的要看get_stylesheet_uri()是什么结果(比如是否以/结尾,没有则需补上)

a123456678 2019-12-02 03:07:22 0 浏览量 回答数 0

回答

PHP 中的 include、require 函数可以实现 include (或 require)语句会获取指定文件中存在的所有文本/代码/标记,并复制到使用 include 语句的文件中。 包含文件很有用,如果您需要在网站的多张页面上引用相同的 PHP、HTML 或文本的话。 PHP include 和 require 语句 通过 include 或 require 语句,可以将 PHP 文件的内容插入另一个 PHP 文件(在服务器执行它之前)。 include 和 require 语句是相同的,除了错误处理方面: require 会生成致命错误(E_COMPILE_ERROR)并停止脚本 include 只生成警告(E_WARNING),并且脚本会继续 因此,如果您希望继续执行,并向用户输出结果,即使包含文件已丢失,那么请使用 include。否则,在框架、CMS 或者复杂的 PHP 应用程序编程中,请始终使用 require 向执行流引用关键文件。这有助于提高应用程序的安全性和完整性,在某个关键文件意外丢失的情况下。 包含文件省去了大量的工作。这意味着您可以为所有页面创建标准页头、页脚或者菜单文件。然后,在页头需要更新时,您只需更新这个页头包含文件即可。 例如: <html> <body> <h1>欢迎访问我们的首页!</h1> <?php require 'header.php';?> <p>一段文本。</p> <p>一段文本。</p> <?php include 'footer.php';?> </body> </html> 答案来源于网络

养狐狸的猫 2019-12-02 02:15:16 0 浏览量 回答数 0

回答

insert delayed 会让insert优先级变低,查询优先。 把每个页面的无数条insert语句合并成一句,能让插入时间减少一个数量级(10倍或更少),用括号把每条语句的数据分组即可。不会的话,用mysqldump导出一个表,然后看看生成的SQL就知道了。 你也可以考虑异步插入。如果你数据不需要实时反馈的。用PHP生成dump restore(SQL)文件,cron job在网站低峰时(比如每天晚上2点)启动。检查指定位置是否有SQL文件存在,存在就把它们执行掉。 或者每单位时间触发Cron,单位时间执行JOB限制数量,执行到指定JOB数量后,退出。等待下一个JOB时间触发发生。

落地花开啦 2019-12-02 01:45:35 0 浏览量 回答数 0

问题

PHP在循环中执行SQL问题

小旋风柴进 2019-12-01 20:09:00 1006 浏览量 回答数 1

回答

您有更多的问题案例,而不仅仅是字符串中的分号。 无法执行的脚本内置命令mysql_query(),例如USE。 不以分号结尾的语句,例如DELIMITER。 包含分号但不包含引号的语句,例如CREATE PROCEDURE。 我不知道在不使用mysql命令行客户端的情况下处理此任务的简便方法。我意识到您说您不能依靠该客户端,但是如果没有该客户端,则需要大量的PHP代码来解析脚本并适当地执行语句。 您也许可以在phpMyAdmin产品中找到这样的代码。但是,该产品是根据GPL许可的,因此,如果您使用任何代码,则还必须根据GPL许可自己的项目。来源:stack overflow

保持可爱mmm 2020-05-17 18:15:40 0 浏览量 回答数 0

回答

因为是用的PDO,而且SQL语句比较长。就没有把SQL语句给贴出来。原PHP语句是:BookArticle::create(array('title' => $title, 'content' => $article_content, 'book_id' => $book->id, 'spider_url' => $url)); 我用的是laravel 框架。 执行的时候报错:SQLSTATE[HY000]: General error: 1366 Incorrect string value: 'xE4xB8x8AxE5xAEx98...' for column 'content' at row 1 我想办法clean utf8 code,依然没办法插入。 后来只想打印出SQL,在phpmyadmin里执行一下. $sql = "insert into book_articles set title='$title',content='$article_content',book_id=$book_id"; phpmyadmin里的出错信息是 data too long for text ... 把text换成longtext 问题解决。

落地花开啦 2019-12-02 02:53:26 0 浏览量 回答数 0

问题

sql语句,mysql下直接执行快,在php慢的问题

落地花开啦 2019-12-01 19:53:11 1273 浏览量 回答数 1

问题

[@徐雷frank][¥20]多个条件进行筛选查询的时候,怎么设计比较好?

晓生寒 2019-12-01 19:26:40 1585 浏览量 回答数 1

回答

"$i" 不用加“” $i for循环的使用: [php] view plain copy print? for(expr1;expr2;expr3){ } 第一个表达式(expr1)在循环开始前无条件求值一次。 expr2 在每次循环开始前求值。如果值为 TRUE,则继续循环,执行嵌套的循环语句。如果值为 FALSE,则终止循环。 expr3 在每次循环之后被求值(执行)。 每个表达式都可以为空或包括逗号分隔的多个表达式。表达式 expr2 中,所有用逗号分隔的表达式都会计算,但只取最后一个结果。expr2 为空意味着将无限循环下去(和 C 一样,PHP 认为其值为 TRUE)。这可能不像想象中那样没有用,因为经常会希望用 break 语句来结束循环而不是用 for 的表达式真值判断。

小旋风柴进 2019-12-02 02:00:55 0 浏览量 回答数 0

回答

把 onclick="sendMM()" 这个代码干掉!###### 第一次点击的时候是触发sendMM()方法,执行"$("#sendMM").click(function(){",这只是为"sendMM"绑定function,并不执行里面的语句. 第二次点击,以我的理解就是,先执行了sendMM()方法,这时候就相当于绑定了两次function,然后又执行了绑定的click事件,所以弹出两次. 以此类推...###### 引用来自#2楼“红薯”的帖子 把 onclick="sendMM()" 这个代码干掉! 已解决,感谢红薯老大 刚学jQuery,犯低级错误了,但是为什么它会累加次数呢,呵呵###### 引用来自#3楼“答复哈”的帖子 第一次点击的时候是触发sendMM()方法,执行"$("#sendMM").click(function(){",这只是为"sendMM"绑定function,并不执行里面的语句. 第二次点击,以我的理解就是,先执行了sendMM()方法,这时候就相当于绑定了两次function,然后又执行了绑定的click事件,所以弹出两次. 以此类推... 点一次响应两次可以理解,但是为什么会一直累加呢###### 多次点击还有错误 [12:09:04.375] POST http://localhost/weibo/user/pub.php [undefined 996ms]###### 引用来自#5楼“刘龙”的帖子 引用来自#3楼“答复哈”的帖子 第一次点击的时候是触发sendMM()方法,执行"$("#sendMM").click(function(){",这只是为"sendMM"绑定function,并不执行里面的语句. 第二次点击,以我的理解就是,先执行了sendMM()方法,这时候就相当于绑定了两次function,然后又执行了绑定的click事件,所以弹出两次. 以此类推... 点一次响应两次可以理解,但是为什么会一直累加呢 累加是因为$("#sendMM").click(function(){}); .click()这个函数,是给$("#sendMM")绑定一个方法,这个方法的内容就是.click()的参数,每点一次,增加绑定一个会弹窗口的函数。 所以就累加啦~###### 引用来自#7楼“SeekerLee”的帖子 引用来自#5楼“刘龙”的帖子 引用来自#3楼“答复哈”的帖子 第一次点击的时候是触发sendMM()方法,执行"$("#sendMM").click(function(){",这只是为"sendMM"绑定function,并不执行里面的语句. 第二次点击,以我的理解就是,先执行了sendMM()方法,这时候就相当于绑定了两次function,然后又执行了绑定的click事件,所以弹出两次. 以此类推... 点一次响应两次可以理解,但是为什么会一直累加呢 累加是因为$("#sendMM").click(function(){}); .click()这个函数,是给$("#sendMM")绑定一个方法,这个方法的内容就是.click()的参数,每点一次,增加绑定一个会弹窗口的函数。 所以就累加啦~ 恩,谢谢,修改后多次点击有时候会提示 [12:09:04.375] POST http://localhost/weibo/user/pub.php [undefined 996ms] 有时候却正常 ###### 引用来自#8楼“刘龙”的帖子 引用来自#7楼“SeekerLee”的帖子 引用来自#5楼“刘龙”的帖子 引用来自#3楼“答复哈”的帖子 第一次点击的时候是触发sendMM()方法,执行"$("#sendMM").click(function(){",这只是为"sendMM"绑定function,并不执行里面的语句. 第二次点击,以我的理解就是,先执行了sendMM()方法,这时候就相当于绑定了两次function,然后又执行了绑定的click事件,所以弹出两次. 以此类推... 点一次响应两次可以理解,但是为什么会一直累加呢 累加是因为$("#sendMM").click(function(){}); .click()这个函数,是给$("#sendMM")绑定一个方法,这个方法的内容就是.click()的参数,每点一次,增加绑定一个会弹窗口的函数。 所以就累加啦~ 恩,谢谢,修改后多次点击有时候会提示 [12:09:04.375] POST http://localhost/weibo/user/pub.php [undefined 996ms] 有时候却正常 没看懂。php错误码?我不会php。###### 引用来自#9楼“SeekerLee”的帖子 引用来自#8楼“刘龙”的帖子 引用来自#7楼“SeekerLee”的帖子 引用来自#5楼“刘龙”的帖子 引用来自#3楼“答复哈”的帖子 第一次点击的时候是触发sendMM()方法,执行"$("#sendMM").click(function(){",这只是为"sendMM"绑定function,并不执行里面的语句. 第二次点击,以我的理解就是,先执行了sendMM()方法,这时候就相当于绑定了两次function,然后又执行了绑定的click事件,所以弹出两次. 以此类推... 点一次响应两次可以理解,但是为什么会一直累加呢 累加是因为$("#sendMM").click(function(){}); .click()这个函数,是给$("#sendMM")绑定一个方法,这个方法的内容就是.click()的参数,每点一次,增加绑定一个会弹窗口的函数。 所以就累加啦~ 恩,谢谢,修改后多次点击有时候会提示 [12:09:04.375] POST http://localhost/weibo/user/pub.php [undefined 996ms] 有时候却正常 没看懂。php错误码?我不会php。 有时候点击会没响应,刷新后就能发送了,在FIREFOX的WEB控制台发现这个错误 [12:09:04.375] POST http://localhost/weibo/user/pub.php [undefined 996ms] 应该是$.ajax里边哪里设置不对吧 ###### 已经解决了,是$.ajax里边的timeout要设置大一点,数据较大时,处理时间可能稍长,超出timeout的设置就中断了

montos 2020-05-31 15:12:55 0 浏览量 回答数 0

回答

把 onclick="sendMM()" 这个代码干掉!###### 第一次点击的时候是触发sendMM()方法,执行"$("#sendMM").click(function(){",这只是为"sendMM"绑定function,并不执行里面的语句. 第二次点击,以我的理解就是,先执行了sendMM()方法,这时候就相当于绑定了两次function,然后又执行了绑定的click事件,所以弹出两次. 以此类推...###### 引用来自#2楼“红薯”的帖子 把 onclick="sendMM()" 这个代码干掉! 已解决,感谢红薯老大 刚学jQuery,犯低级错误了,但是为什么它会累加次数呢,呵呵###### 引用来自#3楼“答复哈”的帖子 第一次点击的时候是触发sendMM()方法,执行"$("#sendMM").click(function(){",这只是为"sendMM"绑定function,并不执行里面的语句. 第二次点击,以我的理解就是,先执行了sendMM()方法,这时候就相当于绑定了两次function,然后又执行了绑定的click事件,所以弹出两次. 以此类推... 点一次响应两次可以理解,但是为什么会一直累加呢###### 多次点击还有错误 [12:09:04.375] POST http://localhost/weibo/user/pub.php [undefined 996ms]###### 引用来自#5楼“刘龙”的帖子 引用来自#3楼“答复哈”的帖子 第一次点击的时候是触发sendMM()方法,执行"$("#sendMM").click(function(){",这只是为"sendMM"绑定function,并不执行里面的语句. 第二次点击,以我的理解就是,先执行了sendMM()方法,这时候就相当于绑定了两次function,然后又执行了绑定的click事件,所以弹出两次. 以此类推... 点一次响应两次可以理解,但是为什么会一直累加呢 累加是因为$("#sendMM").click(function(){}); .click()这个函数,是给$("#sendMM")绑定一个方法,这个方法的内容就是.click()的参数,每点一次,增加绑定一个会弹窗口的函数。 所以就累加啦~###### 引用来自#7楼“SeekerLee”的帖子 引用来自#5楼“刘龙”的帖子 引用来自#3楼“答复哈”的帖子 第一次点击的时候是触发sendMM()方法,执行"$("#sendMM").click(function(){",这只是为"sendMM"绑定function,并不执行里面的语句. 第二次点击,以我的理解就是,先执行了sendMM()方法,这时候就相当于绑定了两次function,然后又执行了绑定的click事件,所以弹出两次. 以此类推... 点一次响应两次可以理解,但是为什么会一直累加呢 累加是因为$("#sendMM").click(function(){}); .click()这个函数,是给$("#sendMM")绑定一个方法,这个方法的内容就是.click()的参数,每点一次,增加绑定一个会弹窗口的函数。 所以就累加啦~ 恩,谢谢,修改后多次点击有时候会提示 [12:09:04.375] POST http://localhost/weibo/user/pub.php [undefined 996ms] 有时候却正常 ###### 引用来自#8楼“刘龙”的帖子 引用来自#7楼“SeekerLee”的帖子 引用来自#5楼“刘龙”的帖子 引用来自#3楼“答复哈”的帖子 第一次点击的时候是触发sendMM()方法,执行"$("#sendMM").click(function(){",这只是为"sendMM"绑定function,并不执行里面的语句. 第二次点击,以我的理解就是,先执行了sendMM()方法,这时候就相当于绑定了两次function,然后又执行了绑定的click事件,所以弹出两次. 以此类推... 点一次响应两次可以理解,但是为什么会一直累加呢 累加是因为$("#sendMM").click(function(){}); .click()这个函数,是给$("#sendMM")绑定一个方法,这个方法的内容就是.click()的参数,每点一次,增加绑定一个会弹窗口的函数。 所以就累加啦~ 恩,谢谢,修改后多次点击有时候会提示 [12:09:04.375] POST http://localhost/weibo/user/pub.php [undefined 996ms] 有时候却正常 没看懂。php错误码?我不会php。###### 引用来自#9楼“SeekerLee”的帖子 引用来自#8楼“刘龙”的帖子 引用来自#7楼“SeekerLee”的帖子 引用来自#5楼“刘龙”的帖子 引用来自#3楼“答复哈”的帖子 第一次点击的时候是触发sendMM()方法,执行"$("#sendMM").click(function(){",这只是为"sendMM"绑定function,并不执行里面的语句. 第二次点击,以我的理解就是,先执行了sendMM()方法,这时候就相当于绑定了两次function,然后又执行了绑定的click事件,所以弹出两次. 以此类推... 点一次响应两次可以理解,但是为什么会一直累加呢 累加是因为$("#sendMM").click(function(){}); .click()这个函数,是给$("#sendMM")绑定一个方法,这个方法的内容就是.click()的参数,每点一次,增加绑定一个会弹窗口的函数。 所以就累加啦~ 恩,谢谢,修改后多次点击有时候会提示 [12:09:04.375] POST http://localhost/weibo/user/pub.php [undefined 996ms] 有时候却正常 没看懂。php错误码?我不会php。 有时候点击会没响应,刷新后就能发送了,在FIREFOX的WEB控制台发现这个错误 [12:09:04.375] POST http://localhost/weibo/user/pub.php [undefined 996ms] 应该是$.ajax里边哪里设置不对吧 ###### 已经解决了,是$.ajax里边的timeout要设置大一点,数据较大时,处理时间可能稍长,超出timeout的设置就中断了

kun坤 2020-06-07 09:01:13 0 浏览量 回答数 0

回答

INSERT在MySQL中,用多行汇编一条语句要比INSERT每行一条语句快得多。 也就是说,听起来您可能会遇到PHP中的字符串处理问题,这实际上是算法问题,而不是语言问题。基本上,当使用大字符串时,您希望最大程度地减少不必要的复制。首先,这意味着您要避免串联。构建大型字符串(例如一次插入数百行)的最快,最节省内存的方法是利用implode()函数和数组分配。 $sql = array(); foreach( $data as $row ) { $sql[] = '("'.mysql_real_escape_string($row['text']).'", '.$row['category_id'].')'; } mysql_query('INSERT INTO table (text, category) VALUES '.implode(',', $sql)); 这种方法的优点是,您无需复制和重新复制到目前为止已与每个串联组合的SQL语句。相反,PHP 在语句中执行一次implode()。这是一个巨大的胜利。 如果您有很多列要放在一起,并且一个或多个列很长,则还可以构建一个内部循环以执行相同的操作,并使用implode()将values子句分配给外部数组。

你的答案 2020-05-08 15:01:34 0 浏览量 回答数 0

回答

INSERT在MySQL中,用多行汇编一条语句要比INSERT每行一条语句快得多。 也就是说,听起来您可能会遇到PHP中的字符串处理问题,这实际上是算法问题,而不是语言问题。基本上,当使用大字符串时,您希望最大程度地减少不必要的复制。首先,这意味着您要避免串联。构建大型字符串(例如一次插入数百行)的最快,最节省内存的方法是利用implode()函数和数组分配。 $sql = array(); foreach( $data as $row ) { $sql[] = '("'.mysql_real_escape_string($row['text']).'", '.$row['category_id'].')'; } mysql_query('INSERT INTO table (text, category) VALUES '.implode(',', $sql)); 这种方法的优点是,您无需复制和重新复制到目前为止已与每个串联组合的SQL语句。相反,PHP 在语句中执行一次implode()。这是一个巨大的胜利。 如果您有很多列要放在一起,并且一个或多个列很长,则还可以构建一个内部循环以执行相同的操作,并使用implode()将values子句分配给外部数组。来源:stack overflow

保持可爱mmm 2020-05-10 17:19:53 0 浏览量 回答数 0

问题

linux cron 报错?报错

爱吃鱼的程序员 2020-06-12 14:22:18 0 浏览量 回答数 1

问题

php队列计划任务怎么做呢,用的是ignore_user_abort吗?

我的中国 2019-12-01 19:40:36 1252 浏览量 回答数 1

回答

这个原因是因为还没执行到回调函数的时候,就已经直接执行下面的 console.log(getData) 语句了。 你得设置成同步请求才能达到你想要的效果。 var getData = null; $.ajax({ type: "GET", url: "data.php", async: false, success: function(data) { getData = data; } }); console.log(getData);

小旋风柴进 2019-12-02 02:19:20 0 浏览量 回答数 0

回答

[使用header()函数】PHP的HTTP相关函数种提供了一个 header()函数,首先要清楚,header()函数必须放在php程序的开头部分,而且之前不能有另外的 header() 函数或者 setcookie() 被调用,如果是带有网页输出,本语句必须放在标记之前。使用如下语句: <? header("location: http://www.bibias.com"); exit; ?> 只要执行这个语句就将自动把网页重定向到 http://www.bibias.com 【使用HTML标记重定向】 <? if(isset($url)) { echo ""; } ?> 其中的 CONTENT="5;url=$url" 表示5秒后,本网页将自动转向 $url这个地址。【用js脚本实现重定向】 <? $url="http://www.bibias.com"; echo "&quot;;<br> echo &quot;location.href=\&quot;$url\&quot;&quot;;<br> echo &quot;"; ?>

小旋风柴进 2019-12-02 02:00:02 0 浏览量 回答数 0

回答

要回答您的问题: MySQL> = 5.1.17(或PREPAREand EXECUTE语句为> = 5.1.21 )可以在查询缓存中使用准备好的语句。因此,您的MySQL + PHP版本可以在查询缓存中使用准备好的语句。但是,请注意MySQL文档中有关缓存查询结果的注意事项。存在许多无法缓存的查询或即使被缓存也无用的查询。以我的经验,无论如何,查询缓存通常不是一个很大的胜利。查询和模式需要特殊的构造才能最大程度地利用缓存。从长远来看,经常需要结束应用程序级缓存。 本机准备对于安全性没有任何影响。伪准备的语句仍将转义查询参数值,它将仅在带有字符串的PDO库中完成,而不是在使用二进制协议的MySQL服务器上完成。换句话说,无论您的EMULATE_PREPARES设置如何,相同的PDO代码都同样容易受到(或不受攻击)注入攻击。唯一的区别是参数替换发生的位置-使用EMULATE_PREPARES,它发生在PDO库中;没有EMULATE_PREPARES,它发生在MySQL服务器上。 如果没有,EMULATE_PREPARES您可能会在准备时而不是执行时得到语法错误;与EMULATE_PREPARES您一起只会在执行时收到语法错误,因为PDO直到执行时才向MySQL提供查询。请注意,这会影响您将编写的代码!特别是如果您正在使用PDO::ERRMODE_EXCEPTION! 附加注意事项: prepare()(使用本机预处理语句)的成本是固定的,因此prepare();execute()使用本机预处理语句的速度可能比使用模拟的预备语句发布纯文本查询要慢一些。在许多数据库系统上,a的查询计划也prepare()被缓存,并且可以与多个连接共享,但是我认为MySQL不会这样做。因此,如果不将准备好的语句对象用于多个查询,则整体执行速度可能会变慢。 作为最后的建议,我认为对于旧版本的MySQL + PHP,您应该模拟准备好的语句,但是对于最近的版本,您应该关闭模拟。 在编写了一些使用PDO的应用程序之后,我做了一个PDO连接功能,该功能我认为是最佳设置。您可能应该使用类似的方法或调整您的首选设置: /** * Return PDO handle for a MySQL connection using supplied settings * * Tries to do the right thing with different php and mysql versions. * * @param array $settings with keys: host, port, unix_socket, dbname, charset, user, pass. Some may be omitted or NULL. * @return PDO * @author Francis Avila */ function connect_PDO($settings) { $emulate_prepares_below_version = '5.1.17'; $dsndefaults = array_fill_keys(array('host', 'port', 'unix_socket', 'dbname', 'charset'), null); $dsnarr = array_intersect_key($settings, $dsndefaults); $dsnarr += $dsndefaults; // connection options I like $options = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ); // connection charset handling for old php versions if ($dsnarr['charset'] and version_compare(PHP_VERSION, '5.3.6', '<')) { $options[PDO::MYSQL_ATTR_INIT_COMMAND] = 'SET NAMES '.$dsnarr['charset']; } $dsnpairs = array(); foreach ($dsnarr as $k => $v) { if ($v===null) continue; $dsnpairs[] = "{$k}={$v}"; } $dsn = 'mysql:'.implode(';', $dsnpairs); $dbh = new PDO($dsn, $settings['user'], $settings['pass'], $options); // Set prepared statement emulation depending on server version $serverversion = $dbh->getAttribute(PDO::ATTR_SERVER_VERSION); $emulate_prepares = (version_compare($serverversion, $emulate_prepares_below_version, '<')); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, $emulate_prepares); return $dbh; } 分享来源:stack overflow

保持可爱mmm 2020-05-10 19:37:11 0 浏览量 回答数 0

回答

因为PHP语句已经被解析成字符串了,可以用eval()函数执行字符串,把PHP代码转换回来,当然可能需要先用str_replace替换掉'<?php',否则可能会报错

小旋风柴进 2019-12-02 02:02:08 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站