查询问题无效

时间:2011-09-23 06:55:07

标签: php mysql

今天我在定义类别时遇到了这个错误。

类别的定义如下:

 $categorie=$_GET['categorie'];    
 if($categorie==nimic)    
 $cat="nimic";    
 elseif($categorie==Aventura)    
 $cat="Aventura";    
 elseif($categorie==Dragoste)    
 $cat="Dragoste";    
 elseif($categorie==Politiste)    
 $cat="Politiste";    
 elseif($categorie==Pentru-Copii)    
 $cat="Pentru-Copii";    
 elseif($categorie==Romanesti)    
 $cat="Romanesti";    
 elseif($categorie==Mistere)    
 $cat="Mistere";    
 elseif($categorie==Scient-Fiction)    
 $cat="Scient-Fiction";    
 elseif($categorie==Vampiri)    
 $cat="Vampiri";    
 elseif($categorie==Thriller)    
 $cat="Thriller";    
 elseif($categorie==Drama)    
 $cat="Drama";    
 elseif($categorie==Erotic)    
 $cat="Erotic";    
 elseif($categorie==Mitologie)    
 $cat="Mitologie";

查询是:

 $query="SELECT *    
 FROM carte    
 WHERE categorie='$cat'    
 AND uploader='$username'    
 ORDER BY data_ad    
 DESC LIMIT $lista";

问题是,在前4 $cat工作时,显示的是可以编辑的结果。但是在$cat的其余部分导致0个文件被编辑..

在phpmyadmin中,我尝试手动检查查询,将$cat替换为不工作的类别,将$username替换为行上传者下填写的有效用户名。

手动它正在运作。那问题应该在哪里呢?任何想法?

6 个答案:

答案 0 :(得分:2)

我真的,对你不使用引号的方式感到非常不舒服。我建议改为:

$categorie=$_GET['categorie'];
if($categorie=='nimic')
$cat="nimic";
elseif($categorie=='Aventura')
$cat="Aventura";
elseif($categorie=='Dragoste')
$cat="Dragoste";
elseif($categorie=='Politiste')
$cat="Politiste";
elseif($categorie=='Pentru-Copii')
$cat="Pentru-Copii";
...

注意最后一个类别中的元字符(“ - ”)。只是说'...;)

答案 1 :(得分:2)

首先,它似乎是$categorie$cat,所以为什么需要这些代码?

其次,字符串应始终用引号('或“)表示

这样的事情应该涵盖它:

if (isset($_GET['categorie']) && is_string($_GET['categorie'])) {
    $cat = $_GET['categorie'];
}

答案 2 :(得分:1)

你在常量中使用连字符(我希望它们是常量)。它被解释为减法,即Pentru-CopiiPentru的值减去Copii的值。

我假设来自$_GET['categorie']的类别是数字。最好创建一个数组并使用它来查找值:

$categories = array(
    264 => 'Aventura',
    621 => 'Dragoste',
    ...
);

$cat = $categories[ $_GET['categorie'] ];

或者,如果类别始终是字符串,则可以$cat = mysql_real_escape_string( $_GET[ 'categorie' ] )

答案 3 :(得分:1)

  

任何想法

是否曾尝试打印出结果查询并在phpmyadmin中运行?并将它与你在phpmyadmin中制作的那个进行比较?

这样的elseif列表也没有意义 单行

$cat = mysql_real_escape_string($_GET['categorie']);

就够了

答案 4 :(得分:1)

嗯......那里有那些常数?

你不应该而不是if-elseif fest做类似的事情:

$category=$_GET['categorie'];
$data = array( 
    1 => 'nimic', 
    2 => 'Aventura',
    3 => 'Dragoste',
    4 => 'Politiste',
        etc ...
);

if ( !array_key_exists( $category , $data )  )
{
   $category = 1 // set default category
}

$cat = $data[ $category ];

并且..请学习使用PDO准备好的陈述:

$db = new PDO('mysql:host=localhost;dbname=demo', 'login', 'password');
$sth = $db->prepare('
   SELECT * FROM carte
   WHERE categorie=:category AND uploader=:user
   ORDER BY data_ad DESC LIMIT :limit'
);
$sth->bindParam(':category', $cat, PDO::PARAM_INT);
$sth->bindParam(':user', $username , PDO::PARAM_STR);
$sth->bindParam(':limit', $limit, PDO::PARAM_INT);
$result = $sth->fetchAll();

答案 5 :(得分:0)

编辑。

首先从MySQL查询中准备一个数组,然后使用php函数搜索数组:

$categorie=$_GET['categorie'];

if(in_array($allowedCategories, $categorie)){
  $cat = $categorie;
}

就是这样。