Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 查询问题不起作用_Php_Mysql - Fatal编程技术网

Php 查询问题不起作用

Php 查询问题不起作用,php,mysql,Php,Mysql,今天我在定义类别时遇到了这个错误 类别的定义如下: 查询是: $query="SELECT * FROM carte WHERE categorie='$cat' AND uploader='$username' ORDER BY data_ad DESC LIMIT $lista"; 问题是,在前4个$cat工作时,显示了可编辑的结果。但在$cat的其余部分,将生成0个要编辑的文件 在phpmyadmin中,我尝试手动检查查询,将$cat替

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

类别的定义如下:

查询是:

 $query="SELECT *    
 FROM carte    
 WHERE categorie='$cat'    
 AND uploader='$username'    
 ORDER BY data_ad    
 DESC LIMIT $lista";
问题是,在前4个
$cat
工作时,显示了可编辑的结果。但在
$cat
的其余部分,将生成0个要编辑的文件

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


它正在工作。那么问题应该在哪里呢?有什么想法吗?

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

$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";
...

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

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

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

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

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

或者,如果类别总是一个字符串,你可以只做
$cat=mysql\u real\u escape\u string($\u GET['categorie'])

首先,不管
$categorie
是什么,
$cat
是什么,为什么需要这些代码

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

类似的内容应该包括:

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

有没有试过打印出结果查询并在phpmyadmin中运行,并将其与在phpmyadmin中生成的查询进行比较

同样,这样一份elseif的列表也没有意义。
单行线

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

足够了吗?这些常数在那里吗

如果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 ];
和..请学会使用准备好的语句:

$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();
编辑

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

$categorie=$_GET['categorie'];

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

仅此而已。

在数据库的categorie下,我放置了两个用“-”分隔的类别,查询在“Pentru Copii”下运行“但在该类别之后,下一个类别将向我显示0个结果categories@Darius-为什么不接受Paul的建议,在字符串周围使用引号,看看这是否能解决您的问题?这不是最干净的方法。手动复制database contents.Oops是没有意义的。没有看到查询。一大早,嗯:)在代码中有数据库内容的副本有什么意义?整个目录的副本。所有这些Politiste和nimic都已在数据库中。在代码中键入它有什么意义?@col shrapnel,你在他的主题中读到了什么?如果类别是在DB中,它们将在一个单独的表中。我假设基于常量的IF-ELSE块检查。@col shrapanel
IF($categorie==nimic)
$categorie
与常量
nimic
进行比较(如果已定义)。。我假设它存在是有原因的…如果它没有定义-它将
categorie
与string
nimic
进行比较,我假设它存在是因为OP在语法方面很弱:)绝对正确。这就是我在帖子里想说的。两个问题:a)“破折号==减法”问题(不引用文字),以及b)为什么复杂的if/else块(或$categories[]数组)如果“$GET['categorie']”总是==$cat?
$categorie=$_GET['categorie'];

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