2015-04-23 31 views
-1

我想使用PHP更新數據庫中的字段。我寫了這段代碼並且工作正常。 var2的值爲0,更新後其值爲1. 我想將字段var2用作PHP變量,因此我可以將它用作if條件。 如果有條件,我想更新var2,如果它的值是0,並且重定向到其他php文件,如果var2的值是1如何正確更新PHP文件中的MySQL數據?

<?php 
session_start(); 
$con=mysql_connect("localhost","root",""); 
mysql_select_db("database",$con); 
$sql = "SET SQL_MODE = ''"; 
mysql_query($sql,$con); 
$sql = "UPDATE table SET var2=1 WHERE var1 = '".$_SESSION['user']."'"; 

if(){} 


mysql_query($sql,$con); 
if(mysql_error() != ""){ 
    echo $sql." ".mysql_error(); 
} 
mysql_close($con); 
?> 

我試圖與

$abc = $_POST['var2']; 
$sql = "UPDATE table SET "$abc"=1 WHERE var1 = '".$_SESSION['user']."'"; 

,但它不爲我工作,我得到了一條消息「解析錯誤:語法錯誤,在C意想不到T_VARIABLE:\ XAMPP \ htdocs中\ egresadoslunes \ finalizar.php on line 10「

+3

首先你[停止使用'mysql_ *'功能(http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)。他們不再被維護,並[正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。瞭解[準備的陳述](http://en.wikipedia.org/wiki/Prepared_statement),並使用[PDO](http://jayblanchard.net/demystifying_php_pdo.html)。您正在嘗試在實際編寫查詢之前執行查詢。你有一個空的if語句。 –

+0

你對'if(){}'做什麼? –

+0

檢查你的引用方法,加上這個應該做什麼'$ sql =「SET SQL_MODE =''」;'和'if(){}'什麼都不做;去掉它。 –

回答

1

你不能在字符串文字之後放置一個變量。您應該明確CONCAT它與.操作:

$sql = "UPDATE table SET " . $abc . "=1 WHERE var1 = '".$_SESSION['user']."'"; 

還是有它內嵌在字符串中

$sql = "UPDATE table SET ${abc}=1 WHERE var1 = '".$_SESSION['user']."'"; 

強制性評論:
使用這樣的字符串操作技巧讓你的代碼敞開到SQL注射攻擊。您應該考慮使用prepared statements來代替。

+0

這假設'$ abc'不是保留字或惡意的東西。它確實需要以已知好的列名進行白名單列表,並可能使用反向標記進行轉義。 – tadman

0

檢查行是否受到影響。

$sql = "UPDATE table SET var2=1 WHERE var2=0 and var1 = '".$_SESSION['user']."'"; 
$result=(mysql_query); 
if(mssql_rows_affected($result) > 0){ 
    //var 2 == 0 
} 
else{ 
    //var 2 != 0 
}