我已经在php中使用梨包多年了.我正在升级/移动使用MDB2 pear包的网站,但尚未针对PHP 5.3.X进行更新.
在5.3中,MDB2正在返回那些新的恼人错误.
Unknown: Assigning the return value of new by reference is deprecated in /usr/local/lib/php/MDB2.php on line 390
Run Code Online (Sandbox Code Playgroud)
我知道我可以更改我的错误报告设置以摆脱它们,但我宁愿不做任何例外.无论如何,这些天是否有其他人使用MDB2并有解决方案?你推荐的是类似的数据库包吗?
根据文档,如果您多次运行查询,准备好的查询会提供显着的性能优势,因为解析查询的MySQL服务器的开销只发生一次.我想知道他们在那里"多次"是什么意思.
即,假设您有一个运行查询一次的网页.现在说该页面每秒被调用50次.从性能角度来看,准备()查询是否更有意义(因此需要两次往返DB服务器;一个准备查询,一个运行它)或者只是正常发送查询(只需要一次往返) ?MySQL和/或PHP mysqli驱动程序是否足够聪明,以便在先前的调用中查询是否为prepare()?
我想弄清楚如何防止sqlinjection,我写了这个基本功能:function
antiInjectie($inputfromform){
$temp = str_replace("'", "`",$inputfromform);
$temp = str_replace("--", "~~",$temp);
return htmlentitites($temp);
}
Run Code Online (Sandbox Code Playgroud)
然而有人告诉我也要考虑十六进制值,但我该怎么做?
更新 我坚持使用MDB2和pgsql
我正在使用PHP 5.3的Pear MDB2.我编码一个项目,更新了数据库之前,我让它开始变化的数据,我想看看有什么()由autoPrepare生成的SQL查询和执行()看起来像之前实际执行它们.
我计划创建并执行这样的更新查询:
$stmt = $db->extended->autoPrepare($tableName, $tableColumns,
MDB2_AUTOQUERY_UPDATE, 'id = ' . $db->quote(12345, 'integer'),
$tableColumnTypes));
$res =& $stmt->execute($tableColumnValues);
Run Code Online (Sandbox Code Playgroud)
我已经知道我可以autoPrepare()通过访问来查看由占位符生成的SQL的SQL $stmt->query.我想看看生成的已完成的SQL execute(),用值代替占位符,而不实际将查询发送到数据库.
我怎样才能做到这一点?