草庐IT

php - PDO::PARAM_INT 是多余的吗?

当与$db->quote()函数一起使用时,PDO::PARAM_INT是否执行任何功能?例如$db->quote($user['id'],PDO::PARAM_INT)?似乎是这样,因为即使是字符串输入也会通过。更不用说它保留整数周围的引号。我为什么要使用它? 最佳答案 它没有任何效果,因为毕竟您正在运行quote函数。它被引号括起来是很自然的。PDO::PARAM_INT在其他上下文中可能更重要,例如准备好的语句,在这些上下文中它的实际处理方式与字符串不同。quote可能更关心不应引用或应以不同方式引用的其他数据类型,例如PDO

PHP PDO mysql 计算返回的行数

这方面有很多问题,我也做了很多研究。但是,我仍然想知道我这样做是否正确。这是我的声明(我已经简化了):try{$stmt=$pdc_db->prepare("SELECT*FROMtableWHEREcolor=:color");$stmt->bindValue(':color',$selected_color);$stmt->execute();$color_query=$stmt->fetchAll();}catch(PDOException$e){catchMySQLerror($e->getMessage());}现在,我正在使用以下方法查看是否返回了任何结果:if(count

php - 锁定 SQL 表,然后执行事务,以根据选择值插入条件

我需要完成以下任务:我需要在同一个表中插入两行,要么都插入,要么都不插入(自动插入两行)。我使用InnoDB表上的事务来执行此操作,如下所示:$db->beginTransaction();#UsingPDOpreparedstatments,executethefollowingqueries:INSERTINTOt1setuid=42,foo=1INSERTINTOt1setuid=42,foo=2$db->commit();但是,如果表中没有列的值为“42”的行,我也只希望插入这些行。我也是这样的:$stmt=$db->prepare("SELECTidFROMt1WHEREui

php - pdo 不从 mysql 函数中读取字符串

我正在使用以下代码从mysql函数读取String:prepare("CALLcheck_user_exists(?)");$stmt->bindParam(1,$value,PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT,50);//callthestoredprocedure$stmt->execute();print"procedurereturned$value\n";echo"PDOconnectionobjectcreated";$dbh=null;}catch(PDOException$e){echo$e->getMessage();}?>这

php - 安全转义表名/列名

我在php中使用PDO,因此无法使用准备好的语句转义表名或列名。以下是我自己实现它的万无一失的方法吗:$tn=str_replace('`','',$_REQUEST['tn']);$column=str_replace('`','',$_REQUEST['column']);$sql="SELECT*FROM`tn`WHERE`column`=23";print_r($pdo->query($sql)->fetchAll());或者还有什么途径可以攻击它? 最佳答案 您可以通过询问数据库哪些列对给定的数据库表有效来使用动态白名单。

php - 将 mySQL 插入和更新语句切换为 PDO 准备语句以防止 SQL 注入(inject)

我正在尝试将这些mySQlINSERTINTO和Update语句切换为PDO准备语句(主要是为了防止SQL注入(inject)),但我在正确使用语法方面遇到了一些困难。我目前使用2种类型的INSERT/Update语句:声明1-名称是硬编码的$qry="INSERTINTOcustomer_info(fname,lname,email,user_name,password)VALUES('$_POST[fname]','$_POST[lname]','$_POST[email]','$user_name','".sha1($salt+$_POST['password'])."')";$

php - PDO bindParam 是否允许不存在的变量?

在开发过程中,我设置了error_reporting(-1);,所以我确信每个语法错误都会由PHP显示。例如echo$ttt;当然可以Notice:Undefinedvariable:tttin...在这段代码中(某个类的一部分代表mysql表中的一行):publicfunctiondelete(){//...$sth=$dbh->prepare('DELETEFROMtobjectsWHEREIdObject=:id');$sth->bindParam(':id',$this->fid,PDO::PARAM_INT);$sth->execute();我输错了现在的$this->fid

php - PDO 返回的数组重复值

我使用PDO连接到MySQL数据库并获取所有数据。当我打印出数组时,值会重复。如何解决?谢谢连接到数据库:$db=newPDO("mysql:host=localhost:3306;dbname=$dbName",$user,$pass,array(PDO::MYSQL_ATTR_INIT_COMMAND=>"SETNAMESutf8"));$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);获取数据并打印结果:$result=$db->query("selectUserBirthday,UserAddress,Use

php - 使用包含空值的数组执行 PDO

这个问题在这里已经有了答案:WhydoesthisPDOstatementsilentlyfail?(1个回答)关闭去年。我需要更新一个数据库,我通过给它一个数组作为参数来使用PDO的execute()方法。我的想法是,当我尝试插入一个NULL值时它会给我一个错误...这是发送的查询/参数的示例:生成的查询:UPDATEtableSETname=?,id_extra1=?,id_extra2=?WHEREid_something=?参数数组:array(size=8)'name'=>string'testing'(length=6)'id_extra1'=>string'2'(leng

php - 散列密码并将其和盐保存到 mysql pdo utf8 编码

我有这个问题,如果不合适,请在评论中告诉我,我会放弃。事情是这样的:我用这段代码生成盐:$salt=mcrypt_create_iv(32);密码是这样的:$password=hash('sha256',$_POST['password'].$salt);并将$salt和$password保存到MYSQL数据库中,目前没有问题,如果我这样连接:$pdo=newPDO('mysql:host=hostname;dbname=defaultDbName','username','password');但如果我以其他方式连接:$pdo=newPDO('mysql:host=hostname;