2013-04-04 58 views
0

我正在使用查詢來刪除一行...引號似乎罰款..但我得到錯誤.. 我試過以下兩種方式,但它不工作..正常的php刪除字符串得到錯誤

  $sch=mysql_query("DELETE FROM schedule WHERE 
    membername='$value' AND trainername='$_SESSION['username']'") or die(mysql_error()); 

      $sch= mysql_query("DELETE FROM schedule 
         WHERE membername=$value 
         AND trainername=$_SESSION['username']"); 

任何建議?謝謝..

+1

請在[正確的SQL轉義(HTTP讀了這些推測串:/ /bobby-tables.com/)纔會遇到麻煩。 – tadman 2013-04-04 19:01:42

+1

您絕對**需要轉義數據庫中的每個值。期。故事結局。無論是來自會話還是常量定義在查詢上方的兩行。 _總是逃脫。你可能應該從MySQL遷移到PDO/MySQLi--因爲'mysql_ *'函數已被棄用 – 2013-04-04 19:01:46

+0

mysql_query()?你知道非折舊方法mysqli_query()嗎? – imulsion 2013-04-04 19:02:17

回答

0

您需要用大括號將字符串中的數組變量包裹起來。

$test = "this is a test {$_SESSION['string']}"; 
+1

你需要把它包裝在'mysql_real_escape_string'中,否則它只是簡單的魯莽。 – tadman 2013-04-04 19:02:46

+0

@tadman並不意味着downvote,因爲首先使用mysql_'是**糟糕的**。 – HamZa 2013-04-04 19:03:41

+1

是的,使用pdo/mysqli或至少逃避字符串...等。所有這些垃圾。這就是爲什麼我沒有在我的例子中使用SQL。這仍然是他們的代碼存在的問題。 – 2013-04-04 19:04:51

0

您不能在PHP雙引號字符串中使用帶引號的數組鍵。它應該是

... AND trainername=$_SESSION[username] ... 
or 
    ... AND trainername={$_SESSION['username']} ... 

你也忘了QUOTE你插入查詢

... AND trainername='...' 
        ^---^-- 
+0

不要主張第一個解決方案......我知道它在字符串內部時是有效的 - 但人們也傾向於在字符串之外使用相同的符號。可惜的是PHP的未來 - 它的工作原理......但這是不好的做法。 – 2013-04-04 19:02:51

+0

這些都不能正確轉義,並且不起作用。 'AND trainername = bob'不是有效的SQL。 – tadman 2013-04-04 19:03:18

+0

引用*和*轉義都是必需的,才能生效。 – tadman 2013-04-04 19:04:44