好的,这让我发疯了。 我的PHP版本是5.2.17,MySQL版本是5.1.59
我的javascript(jquery)是:
$(document).ready(function(){$.post("file.php",{"dropTable":tableName}, function(data){});});
这是页面加载时的ajax调用
我的“file.php”包含以下代码:
<?php
require_once"getDBParameters.php";
$dbParameters = getDBParameters();
if($dbc = mysqli_connect($dbParameters['db_host'], $dbParameters['db_username'], $dbParameters['db_pass'], $dbParameters['db_name'])){
if(isset($_POST['dropTable'])){
$dropTable= $_POST['dropTable'] ;
$escapedRealString = mysql_real_escape_string($dropTable, $dbc );
echo ($escapedRealString );
exit();
}
}
?>
我收到PHP错误说:
mysql_real_escape_string() expects parameter 2 to be resource, object given in file.php on line 9
如果我使用预准备语句,相同的连接可以正常工作,但是,在这种情况下我不能使用预准备语句,因为我根据用户输入删除了MYSQL表:
DROP TABLE $dropTable
PHP手册说我不能使用像这样的准备语句:
prepare("DROP TABLE ?")
我可以向你保证,“getDBParameters”函数运行正常。 有什么问题 ?还有其他解决办法吗?
答案 0 :(得分:5)
mysqli_connect
^
mysql_real_escape_string
^
您正在混合MySQL i 和MySQL功能。它们是完全不同的,不兼容的扩展。如果必须,请使用mysqli::real_escape_string
。
答案 1 :(得分:1)
如果您正在使用mysqli_connect
,则无法使用mysql转义函数。
您也可以使用mysqli_real_escape_string
。
请注意,因为PHP mysql和mysqli库是不同的,所以参数类型也是如此。 mysql使用resource,而mysqli是object。
编辑:如上所述,根据用户输入删除表是危险的。