2012-06-24 139 views
0

我寫了下面的代碼,但它不是更新數據庫,,它的腳本的一部分,它不再work..cant找到變通的辦法..需要建議不更新SQL數據庫

<?php 
$link = mysql_connect('xxxxxxxx'); 
if (!$link) { 
die('Could not connect: ' . mysql_error()); 
} 

mysql_select_db("xxx", $link); 


$usernames='aneeshxx'; 
echo $usernames; 

$update = "INSERT sanjana SET $name ='$usernames'"; 
mysql_query($update, $link); 

$update1 = "INSERT INTO sanjana (name)VALUES ($usernames)"; 
mysql_query($update1, $link); 


?> 
+1

'mysql_錯誤()'和'mysql_錯誤號()'是你最好的朋友...... – CodeZombie

+0

請爲你的自我,停止使用MySQL的功能!你有PDO,MySQLi和很多抽象層,ORM,Object Mapping等等! MySQL的功能很糟糕。 – Exos

回答

0

你有INSERT關鍵字爲您更新SQL,這應改爲更新:

$update = "UPDATE sanjana SET $name ='$usernames'"; 
+0

都能跟得上抱歉,它不工作:( – Tina

+0

它的一個空表,我插入數據 – Tina

2

正確更新SQL子句是像這樣:

UPDATE table 
SET column = expression; 

OR

UPDATE table 
SET column = expression 
WHERE predicates; 

SQL: UPDATE Statement

您的查詢應該是這樣的:

​​

當然你需要指定一個行更新(ID),其他原因,整個表將設置列$name$usernames

UPDATE:

因爲你插入空表的數據,你應該先執行$ UPDATE1查詢然後執行$更新查詢。 UPDATE子句將不會在空表上進行更改/插入。

2

問題1:前你打電話的mysql_query這是很好的做法,創建SQL字符串:使用正確的「插入」(創建新的記錄)與「更新」(修改現有記錄)

問題2 (),所以你可以把它打印出來用於調試

問題3:這也是很好的做法,以檢測錯誤

例:

<?php 
    $link = mysql_connect('xxxxxxxx') 
    or die('Could not connect: ' . mysql_error()); 

    mysql_select_db("xxx", $link); 

    $usernames='aneeshxx'; 
    $sql = "INSERT INTO sanjana (name) VALUES ('" . $usernames + ")"; 
    echo "sql: " . $sql . "...<br/>\n"; 
    mysql_query($sql, $link) 
    or die(mysql_error()); 
+0

感謝您的答覆..它顯示的查詢是空的:( – Tina

+0

BTW:哈拉爾Brinkhof是關於有必要通過「保護」你的服務器絕對正確採用「預處理語句」,而不是原始的SQL字符串(SQL字符串直接從網絡輸入是非常* *脆弱*非常*危險的「SQL注入」攻擊內置)「PHP數據對象」(HTTP:// WWW。 phpeveryday.com/articles/PDO-Prepared-Statement-P550.html)(PDO)是緩解這種風險的好方法。 – paulsm4

3
$update = "INSERT sanjana SET $name ='$usernames'"; 

這可能意味着作爲UPDATE語句,所以更新應該

$update = "UPDATE sanjana set name = '$usernames'"; 

我把name,而不是$name因您的第二個查詢並沒有看到$name被定義任何地方。請注意,這會將sanjana表中每行的name列中的值更改爲$用戶名的值,通常這樣的語句會受到conditions(例如)的限制。WHERE userid = 33

$update1 = "INSERT INTO sanjana (name) VALUES ($usernames)"; 

它需要一個INSERT聲明已經值引述所以

$update1 = "INSERT INTO sanjana (name) VALUES ('$usernames')"; 

警惕的是把變量直接進入您的查詢字符串的這種方式讓你容易受到SQL injection,打擊這種請使用PDOmysqli擴展名,它們都可以通過爲您提供prepared statements來保護您免受注入;普通的舊mysql_ *不推薦再使用。

使用你會使用PDO預處理語句這樣

<?php 
// we got $usernames from wherever you define it 

$pdo = new PDO('mysql:dbname=mydb;host=localhost','username','password'); 

// to insert 
$statement = $pdo->prepare('INSERT INTO `sanjana` (name) VALUES (:name)'); 
// the following replaces :name with $usernames in a safe manner, defeating sql injection 
$statement->bindParam(':name',$usernames); 
$statement->execute(); // it is done 


// to update 
$statement = $pdo->prepare('UPDATE `sanjan` SET `name` = :name'); 
$statement->bindParam(':name',$usernames); 
$statement->execute(); // it is done 

所以你可以看到保護您的代碼的惡意輸入並不難,它甚至讓你的SQL語句很多更容易閱讀。你有沒有注意到你甚至不需要在SQL語句中引用你的值?準備好的陳述爲你照顧!減少代碼中出現錯誤的方法之一。

請務必閱讀起來就可以了,它會爲你節省頭痛。 PDO甚至具有獨立於數據庫的優點,使得使用現有代碼更容易使用另一個數據庫。