如果我们不能使用PDO或mysqli(出于任何原因),这种方法对于INSERT和SELECT是否安全?
<?php
if (!empty($_POST[id]) && !empty($_POST[name])) {
require_once ( 'config.php' );
// SAFE INTVAL ID
$id = intval($_POST[id]);
$connect = mysql_connect("$server", "$user", "$password")
OR die(mysql_error());
mysql_select_db("$database", $connect);
// ESCAPING NAME
$name = mysql_real_escape_string($_POST[name]);
$query = "INSERT INTO table (id, name) VALUES ('$id', '$name')";
$result = mysql_query($query, $connect);
if (!$result) { echo 'success'; } else { echo 'fail'; }
}
?>
因为我多次读过永远不会使用mysql_query, 即使我们小心并且及时逃脱,这是危险的吗?
答案 0 :(得分:3)
据我所知,您的查询完全没问题。 您正在使用
转义SQLmysql_real_escape_string($_POST[name])
这为您的代码增加了额外的安全性。 唯一的建议是使用:
$_POST['name']
而不是
$_POST[name]
因为它会生成PHP警告。
感谢。
答案 1 :(得分:1)
要添加到其他答案,它是“安全的”,因为查询无法被利用。但要注意的一件事是,您信任您的用户为您提供ID(我假设这是您的主要密钥)。当然,这意味着您的用户可以覆盖其他记录。
更好的方法是从查询中省略id列(及其值),并在创建表时将列标记为AUTO_INCREMENT。查询中任何省略的值都将成为其默认值,在这种情况下,通常是id
+ 1的最后一个值。
答案 2 :(得分:1)
即使你说你不能使用它们,可能是因为它们太复杂了(?),你真的应该做一些研究并理解如何使用它们。我保证,一旦你这样做,你甚至不想回去! :)我建议使用PDO / MySQLi,因为PHP 5.5正在贬值MySQL,你会得到E_DEPRECIATED通知。
使用MySQLi或PDO编写的语句意味着您不必转义任何字符串,只需用?
引用每个变量,然后稍后说明哪种数据类型?例如,s
是字符串。
然后您不需要使用mysql_real_escape_string()
。未来证明您的代码! :)