这是我目前的代码
$search=$_GET["Search"];
$search = addcslashes(mysql_real_escape_string($search), '%_');
此代码由DREAMWEAVER CS4从此处生成
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}
$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}
mysql_select_db($database_Echos, $Echos);
查询数据库的SQL Satement
$query_Recordset1 = "SELECT catelogue.ARTIST, catelogue.TITLE, catelogue.`CAT NO.`, catelogue.FORMAT, catelogue.`IMAGE PATH` FROM catelogue WHERE catelogue.TITLE LIKE '%$search%'";
更多Dremweaver代码
$Recordset1 = mysql_query($query_Recordset1, $Echos) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
此后,数据以表格格式显示
我还是新手,最近几天发现你可以将staements放入我的搜索词并破坏8个月的数据库工作。这不像数据库没有备份,但我想安全然后抱歉。
我已经读过准备好的陈述是阻止How can I prevent SQL injection in PHP?的最佳方式。
但正如我所说,我是新手,并且对此并不了解。
So Simple put是DW创建的足够安全的代码
是否应该更改以使其更简单
如果不够安全,我该如何让它更安全?
我在这里使用准备好的装备吗?如果是这样,有人可以在这里解释如何使用它
请提供任何帮助
答案 0 :(得分:6)
您的代码遭受了许多不良做法,但它并不像我以前常见的PHP代码那样完全不安全或完全不好。
简单来说 - 你不想使用PHP的mysql_
函数。你应该做的是使用PDO。
mysql_real_escape_string
是安全的,但不是100%。有关更好的说明,请参阅解释when mysql_real_escape_string is vulnerable的链接。
那么你要做的是用PDO创建预准备语句然后绑定输入值。 PDO根据使用的字符集和数据库清除它们,这使它100%安全,并且不用担心你是否错过了某些东西。