2009-10-07 2 views
1

Каков наилучший способ сохранить URL-адрес или символы в базе данных MYSQL.Как сохранить URL-адрес в базе данных MYSQL из массива

I'v видел это используется "{$ htmlOutputArray [1]}" , а потом еще где это "$ htmlOutputArray [1]" и некоторых других местах, сделать то, что i'v сделано ниже ... но является лучшим?

До сих пор у меня есть: (пример кода)

$html = "034251\nhttp://stackoverflow.com/questions/ask" 
$htmlOutputArray = explode("\n", "$html"); 

$htmlOutput = $htmlOutputArray[0]; 
$postIDOutput = $htmlOutputArray[1]; 
$con = mysql_connect('localhost', 'user', 'pass') or die('Could not connect: ' . mysql_error()); 
#echo 'Connected successfully'; 
mysql_select_db("dbName", $con); 
mysql_query("UPDATE tableName SET PostidINT='$postIDOutput', URLofPostTXT='$htmlOutput' WHERE id='$unID'"); 
mysql_close($con); 

ответ

4

Прежде всего, вы должны смотреть в опасности SQL injection и как вы можете предотвратить его.

Вот как вы можете сделать это, так и более безопасную версию.

mysql_select_db("dbName", $con); 

$sql = sprintf("UPDATE tableName SET PostidINT=%d, URLofPostTXT='%s' WHERE id=%d", 
    mysql_real_escape_string($htmlOutputArray[1]), 
    mysql_real_escape_string($htmlOutputArray[0]), 
    mysql_real_escape_string($unID)); 

mysql_query($sql); 

mysql_close($con); 

Что mysql_real_escape_string() делает, предотвращая опасные символы быть введены в базу данных.

Что делает sprintf(), это форматирование вашей строки, так, например, в переменных PostidINT и id будут введены только числа.

3

Я бы голосовать за подготовленные заявления (и MySQLi):

$connection = new mysqli("localhost", "user", "pass", "db"); 
$statement = $connection->prepare("UPDATE tableName SET PostidINT=?, URLofPostTXT=? WHERE id=?"); 
$statement->bind_param("i", $postIDOutput); 
$statement->bind_param("s", $htmlOutput); 
$statement->bind_param("i", $unID); 
$statement->execute();