2013-07-19 73 views
1

我想通過下面的代碼更新MySQL數據庫,但它不工作,爲什麼?更新datebase by php

<?php 
    mysql_connect("localhost","root",""); 
    mysql_select_db("timer"); 
    $update=$_COOKIE['name']; 
    mysql_query("UPDATE user SET password='2' WHERE username=$update"); 
?> 
+0

它更好地使用mysqli或PDO並使用準備好的語句而不是直接輸入,請參見http://www.php.net/manual/en/ref.pdo-mysql.php – DarkBee

+1

您正在使用[an **過時**數據庫API](http://stackoverflow.com/q/12859942/19068),並應使用[現代替換](http://php.net/manual/en/mysqlinfo.api.choosing.php)。你還**易受[SQL注入攻擊(http://bobby-tables.com/)**,一個現代化的API會更容易爲[維護](http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php)自己從。 – Quentin

回答

1

應該引用字符串值:MySQL String Literals

mysql_query("UPDATE user SET password='2' WHERE username='$update'"); 
+0

mysql_ *函數已被棄用:http://php.net/manual/en/function.mysql-connect.php – DarkBee

+0

你也想要認真地逃避你的查詢參數:http://php.net/manual/en/ function.mysql-escape-string.php – n3rd

+0

greeeeat它的工作原理,謝謝revoua –

0

使用準備好的查詢,你這樣做的方式不是一個好的做法。還檢查$update不爲空,否則查詢將無法正常工作,最後,使用mysqli_*功能,而不是mysql_* :)

0
<?php 
    mysql_connect("localhost","root",""); 
    mysql_select_db("timer"); 
    $update=$_COOKIE['name']; 
    mysql_query("UPDATE ´user´ SET password='2' WHERE username='$update'"); 
?> 

嘗試在此查詢這樣說你的表的名稱:'user'

讓我推薦你,如果你的查詢不起作用,那麼你可以把整個查詢放在回聲(或打印),看看有什麼不對。

例如:

echo "mysql_query(\"UPDATE user SET password='2' WHERE username=$update\"; 
1
$dsn = 'mysql:dbname=timer;host=127.0.0.1'; 
$user = 'root'; 
$password = ''; 

$update=$_COOKIE['name']; 

$query = 'UPDATE user SET password='2' WHERE username=(?)'; 

try { 
    $dbh = new PDO($dsn, $user, $password); 
    $dbh->prepare($query)->execute(array($query)); 

} catch (PDOException $e) { 
    echo 'Connection failed ' . $e->getMessage(); 
} 

不能確定它是否工作,因爲我不知道你在你的$ _COOKIE數組。

但代碼應該看起來像這樣。

爲了安全起見,您可以爲變量$ update添加一些文本轉換,如addslashes或其他。