2013-04-04 55 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