2014-02-09 40 views
0

我有连字符的查询问题。连字符字符的php mysql查询

$user = "test-user"; 
$q = @mysql_query("SELECT id FROM table WHERE user='$user'"); 
echo mysql_error(); //no error message 

测试用户记录在表中,但查询结果为空。另外mysql错误信息是空的。哪里不对?编辑: 谢谢你的答案。我向大家道歉。我发现问题,我现在看到问题不在查询中。问题来自正则表达式。

if (preg_match("/^[a-z0-9\-]+$/i", $user)) //added \- to regex for dash 
{ 
$q = @mysql_query("SELECT id FROM table WHERE user='$user'"); 
} 
+1

一两件事 - 不使用'@'来取消错误信息从'mysql_query';另一个 - 你应该看看使用mysqli_ *,因为mysql_函数已被弃用。 – andrewsi

+0

为您的表格添加样本日期,这不起作用。错误非常小 - 它与连字符无关。 – user4035

+0

它可能只是你的例子,但'table'是MySQL中的一个保留字,因此需要反复打勾。但是,你应该回到所有的表格和列名称的习惯过程。 – JamesG

回答

0

只需使用mysql_real_escape_string逃离数据串:

if (preg_match("/^[a-z0-9]+$/i", $user)) //dash character not in regex 
{ 
$q = @mysql_query("SELECT id FROM table WHERE user='$user'"); 
} 

如下我已经纠正了这个问题。

$user = "test-user"; 
$user = mysql_real_escape_string($user); 
$q = @mysql_query("SELECT id FROM table WHERE user='$user'"); 
echo mysql_error(); //no error message 

不过我也建议使用or die()语法,而不是你在的地方有@mysql_query

$user = "test-user"; 
$user = mysql_real_escape_string($user); 
$q = mysql_query("SELECT id FROM table WHERE user='$user'") or die ("Error: " . mysql_error()); 
+0

并注意mysql_函数套件已被弃用 – Strawberry

+0

@Strawberry谁在乎'mysql_',但事实是,这是一个真正迂腐的方式来回答一个问题。在这个网站上骚扰海报关于这一点是皱眉。原始海报应该按照他们应该的方式编码,如果'mysql_'停止工作,那就是他们的问题。 – JakeGould

0

如果你改变什么区别查询到:

$q = mysql_query("SELECT id FROM table WHERE user='".$user."'"); 

除非我有一个非常缓慢的星期天,我觉得你要搜索的文字串$user而非variable value

+0

这应该没有什么区别 - 字符串用双引号括起来,所以'$ user'将被正确替换。 – andrewsi

0

试试这个:

$user = "test-user"; 
$q = mysql_query("SELECT id FROM `table` WHERE user='".$user."'") 
    or die(mysql_error());//no error message; 

与mysqli_完整的示例:

$host = ""; 
    $user = ""; 
    $password = ""; 
    $database = ""; 

    $user_name_query = "test-user"; // If this value is from a form please read more about sql-injection. 

    // open connection to database 
    $link = mysqli_connect($host, $user, $password, $database); 
     IF (!$link){ 
      echo ("Unable to connect to database!"); 
     } 
     ELSE { 
      // SELECT QUERY 
      $query = "SELECT id FROM `table` WHERE user='".$user_name_query."'"; 
     mysqli_query($link,$query) or die("Query failed"); 

     } 
// close connection to database 
     mysqli_close($link); 
+0

@desolator感谢您的编辑。 –

+0

如果您使用@,它不会显示错误。 –

+0

可以在以下位置找到有关sql注入的文章:http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php。 –

0
 $p = mysql_query("SELECT id FROM table WHERE user='$user'"); 
     if (!$p) 
     { 
      die('Could not query:' . mysql_error()); 
     } 
     else 
     { 
      echo mysql_result($p>0); 
     } 

尝试