草庐IT

prepared-statement

全部标签

php - 准备好的语句会完全保护我的网站免受 MySQL 注入(inject)吗?

我在查询中使用准备好的语句和MySQLi来防止注入(inject)攻击。准备好的语句会完全消除对mysql_real_escape_string的需要吗?在保护我的网站时,还有什么我应该考虑的吗? 最佳答案 只要您正确使用准备好的语句,它们就可以。您必须确保绑定(bind)所有外部变量,而不是将它们直接放在查询中。例如$stmt=$mysqli->prepare("SELECTDistrictFROMCityWHEREName=".$name);正在准备此语句,但它没有使用任何一种绑定(bind)方法,因此没有任何用处。它仍然容易受

php - zend 框架 : how to prepare and execute WHERE IN clause?

我想准备一个在循环内使用的语句。当我尝试执行该语句时,我在日志中看到一条错误消息,提示“参数编号无效:未绑定(bind)任何参数”。我的代码有什么问题?$itemSelectSql="SELECT*FROM`tblItems`WHERE`itemID`IN(?)";$itemSelectStmt=newZend_Db_Statement_Mysqli($this->db_ro,$itemSelectSql);while(){...$itemIds=array();//populate$itemIdsarray...$itemSelectStmt->execute(array($item

php - 准备好的语句mysqli不返回行

我有一些带有准备好的语句的php代码。它是通过javascript中的Ajax调用的。我确定在帐户表中有一个名为mark(无上限)的帐户,但是当我将$_POST['query']设置为m调用它时,它发现$stmt->num_rows===0为真。看不出任何错误,就是不行!如您所知,它正在将内容回显到表格中。我在phpMyAdmin中尝试了这个查询:SELECTusernameFROMaccountsWHEREusernameLIKE'%m%'并且它工作正常。我创建这段代码是为了在mysql数据库中搜索用户名。如果您想知道,$conn是包含文件中定义的有效mysqli对象。stmt_in

php - PDO、准备好的语句和 SQL 注入(inject)

在阅读了几篇关于PDO和MySQLi准备语句的文章之后,也已经阅读了stackoverflow.com上关于准备语句和SQL注入(inject)的数十个问题,人们说通过正确使用准备语句,不再需要从中转义条目用户,但我认为我仍然担心存在安全问题。第一个问题:如果我在准备好的语句中使用它们之前仍然使用reg-exp和转义来清理条目,这是否就像我过度使用它一样?第二个问题:如果准备好的语句正在做关于SQL注入(inject)的工作-来自人们的评论和回答-为什么仍然有受损的数据库和越来越多的关于信用卡号码和密码的暴露数据,甚至来自“大”和知名网站?这是否意味着准备好的陈述本身并没有那么免疫,或

PHP Prepare 方法在调用两次时不起作用?

我正在使用如下准备方法:$db=newmysqli("localhost","***","***","***");if($db->connect_error){die('ConnectionError');}$id=1;if($stmt=$db->prepare('SELECTnameFROMtableWHEREid=?')){$stmt->bind_param('i',$id);$stmt->execute();//$stmt->close();echo"Success";}else{echo"Somethingbroke:/";}$id=2;if($stmt=$db->prepar

php - 类型定义字符串与绑定(bind)变量的数量不匹配

这个问题在这里已经有了答案:mysqli_stmt::bind_param():Numberofelementsintypedefinitionstringdoesn'tmatchnumberofbindvariables(3个答案)关闭5年前。我使用我为所有项目构建的动态数据库类。刚开始一个新的,类(class)让我打嗝。这是我的代码,不是细节。但我通过最少的代码重新创建了错误。functionvref($arr){if(strnatcmp(phpversion(),'5.3')>=0){//ReferenceisrequiredforPHP5.3+$refs=array();for

php - 将 $item = mysql_fetch_assoc($stmt) 更改为准备语句样式

此代码有效,但我正在尝试找出如何更改$rose=mysql_fetch_assoc($stmt);“准备好的语句样式”部分。有人知道吗?$rose_id=$_GET['rose_id'];//preparethestatement$stmt=$conn2->prepare("SELECT*FROMrosenameLEFTJOINrosevarietyON(rosename.variety_name=rosevariety.variety_name)WHERErose_id=?");//bindtheparameters$stmt->bind_param("i",$rose_id);//

php - 如何在 Joomla 3 的查询中使用准备语句/绑定(bind)值?

我想知道如何在where子句中绑定(bind)值。我明白出于安全原因必须这样做。$db=JFactory::getDbo();$query=$db->getQuery(true);$query->select("*")->from($db->quoteName("food"))->where("taste=:taste")->bind(':taste','sweet');$db->setQuery($query);$rows=$db->loadAssocList();我收到这个错误:YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorr

php - 如何使用带有数组作为第二个参数的 mysqli::bind_param

这个查询应该将一个新用户插入到“用户”表中$user=DB::getInstance()->insert('users',array('username'=>'jim','password'=>'pass','salt'=>'salt'));对应的insert()publicfunctioninsert($table,$fields=array()){if(count($fields)){$keys=array_keys($fields);$values=null;$x=1;foreach($fieldsas$field){$values.="?";if($xqueryDB($sql,

php - fatal error : Switch statements may only contain one default clause in mpdf. PHP

我正在使用mPDF,它在本地主机上运行良好。我将项目上传到实时服务器,但它没有正确生成pdf。WriteHTML($body);$mpdf->Output('SaveToPDF.pdf','D');在顶部,我放置了错误显示代码。要查看错误发生了什么问题,我有以下错误。Fatalerror:Switchstatementsmayonlycontainonedefaultclausein/customers/d/e/a/....URL..GO..HERE/mpdf.phponline1432我在我的本地主机上使用PHP版本5.6.31,在现场我使用的是one.com,在那里我可以切换到不同