草庐IT

prepared-statements

全部标签

php - mysql prepared statements中的绑定(bind)过程

众所周知,准备好的语句可以很好地防御SQL注入(inject)攻击。有人能解释一下绑定(bind)过程中发生了什么吗?我的主要困惑源于语句使用占位符并且这些占位符被变量替换的事实。因此,如果变量包含恶意sql,那么它们仍然会代替占位符进行绑定(bind)? 最佳答案 不,绑定(bind)过程确保绑定(bind)值与进入数据库的值1:1匹配。所以,'xxx;删除表yyy;'作为一个值将是varchar字段中的实际值。当不使用参数绑定(bind)时,将执行此代码。 关于php-mysqlpr

php - 我可以在没有bind_param的情况下通过PDO Prepared语句完全防止SQL注入(inject)吗?

我是PDO的新手,如果您觉得我在问愚蠢的问题,我很抱歉。没有Bind_param的普通和简单的PDO准备语句:$sql=$db->prepare('SELECT*FROMemployeesWHEREname=?');$sql->execute(array($name));$rows=$sql->fetchAll();使用Bind_param:$sql->bind_param("s",$name);//smeansthedatabaseexpectsastring我听到有人说:“保护来自使用绑定(bind)参数,而不是来自使用准备好的语句”。请问什么是绑定(bind)参数?Bind_pa

mysql - 谷歌云 SQL : Unable to execute statement

我的谷歌云sql表目前有1126571行,每天至少增加3万行。执行查询时:selectcount(distinctsno)astotfromvisitssql提示会产生如下错误:Error0:Unabletoexecutestatement.CloudSQLQuery是否有责任超过60秒的异常。当表变大时如何解决这个问题。 最佳答案 将表格分成两个表格。一个用于接收新访问……交易……一个用于报告。索引报表。定期传输和清除数据。事务表将保持相对较小,因此计数会很快。有了索引,报表统计起来会很快。

php - 禁用 PDO::ATTR_EMULATE_PREPARES 导致 'unknown' 问题

只是一个关于PDO的ATTR_EMULATE_PREPARES属性的快速问题-简而言之,当保留为默认值(true)时,一切正常且花花公子。但是禁用它,好吧,我什至没有收到PHP错误消息,只有浏览器警告告诉我“连接已重置”。这里是我使用的代码示例以供引用true,PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC,PDO::ATTR_EMULATE_PREPARES=>true));}catch(PDOException$e){echo"";print_r("Error:".$e);echo"";die();}$idNum="1";$sth=$d

php - 发送 STMT_PREPARE 数据包时出错。 PID=2

我不知道为什么我会遇到这个错误。我有以下脚本:foreach($brandsas$brand){//about600itemsforthisloop........DB::table('mailing_list')->insert(array('email'=>$email,'source'=>$source,'source_url'=>$brand->external_url,'facebook_url'=>$facebook_url,'instagram_id'=>$instagram_username,'instagram_url'=>$instagram_url,'instag

java - 保留 Prepared Statements 成本高吗? (Java 和 JDBC)

我想弄清楚在创建数据库连接时缓存所有语句对我来说是否有效,或者我是否应该只创建最常用的语句并在需要时创建其他语句。.在所有客户端线程中创建所有语句似乎很愚蠢。任何反馈将不胜感激。 最佳答案 一个有点像样的数据库已经缓存了它们。只需在您实际需要执行查询时触发Connection#prepareStatement()即可。您实际上也别无选择,因为连接、语句和结果集应该在最短范围内获取和关闭,即在同一try-finallyblock中执行查询时的方法。依次打开和关闭每个查询的连接可能确实很昂贵。一个常见的解决方案是使用connection

mysql - 为什么 Apache 提示我的 mod_perl 程序 "disconnect invalidates 1 active statement handle"?

disconnectinvalidates1activestatementhandle(eitherdestroystatementhandlesorcallfinishonthembeforedisconnecting)以下从MySQL抓取数据的代码成功执行,但会导致Apache在其错误日志中生成上述消息:my$driver="mysql";my$server="localhost:3306";my$database="test";my$url="DBI:$driver:$database:$server";my$user="apache";my$password="";#Conne

php - fatal error : Uncaught exception 'mysqli_sql_exception' with message 'No index used in query/prepared statement'

当我运行以下代码时,出现错误提示Fatalerror:Uncaughtexception'mysqli_sql_exception'withmessage'Noindexusedinquery/preparedstatement'$mysql=newmysqli(DB_SERVER,DB_USER,DB_PASSWORD,DB_NAME)ordie('Therewasaproblemconnectingtothedatabase');if(mysqli_connect_errno()){printf("DBerror:%s",mysqli_connect_error());exit()

php - Doctrine 不会在 Mysql 中保留具有 bool 值和 PDO::ATTR_EMULATE_PREPARES = false 的实体

我们正在使用Symfony创建一些网络服务。我们使用Doctrine-ORM来存储实体,使用Doctrine-DBAL来检索数据,因为它非常轻量并且可以重用ORM(实体管理器)连接。当使用Doctrine-DBAL时,整数值作为字符串返回给PHP,我们希望有整数值,特别是因为它们被返回到Javascript。在讨论之后HowtogetnumerictypesfromMySQLusingPDO?我们已经安装了mysqlnative驱动程序sudoapt-getinstallphp5-mysqlnd并使用PDO::ATTR_EMULATE_PREPARE=false设置我们的symfony

PHP PDO : how does re-preparing a statement affect performance

我正在编写一个半简单的数据库包装器类,并希望有一个可以自动操作的获取方法:它应该只在第一次准备每个不同的语句,然后绑定(bind)并执行查询连续调用。我想主要问题是:如何重新准备相同的MySql语句,PDO会神奇地识别该语句(因此我不必)并停止操作吗?如果不是,我计划通过为每个不同的查询生成一个唯一的键来实现这一点,并将准备好的语句保存在数据库对象的私有(private)数组中——在它的唯一键下。我打算通过以下方式之一获取数组键(我都不喜欢)。按优先顺序:让程序员在调用方法时传递一个额外的、始终相同的参数-类似于basename(__FILE__,".php")的内容。__LINE__