PHP,MySQL if,否则有条件不起作用

时间:2015-08-06 12:27:03

标签: php mysql

从MySQL表中获取数据时,我很震惊。我正在使用条件WHERE子句来过滤掉结果。我有两个表的模式是:

CREATE TABLE IF NOT EXISTS `images` (
  `image_id` int(11) unsigned NOT NULL,
  `keyword_id` int(11) unsigned NOT NULL,
  `url` varchar(2083) NOT NULL,
  `size` varchar(50) NOT NULL,
  `color` varchar(50) NOT NULL,
  `type` varchar(50) NOT NULL,
  `created_at` datetime NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=901 DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `keywords` (
  `id` int(11) unsigned NOT NULL,
  `description` varchar(100) NOT NULL,
  `created_at` datetime NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=latin1;

我保存了一些关键字和图片链接。为了规范化数据,我已将图像链接保存在单独的图像中。表格' keyword_id'是对应于'描述'的外键。关键字表中的(即关键字)字段。使用以下SQL语法,我尝试指定选择条件 通过关键词拉出图像链接,例如"胆固醇水平。"现在,当选择标准失败时,脚本必须输出一些错误,这些错误不会发生 我写的if条件语句,我无法弄清楚为什么?这是我的第一个担忧。

其次,我想通过不是精确的关键字匹配来获取图像。例如,如果我的关键字表包含keyword "Cholesterol levels,"我的 脚本可以通过该关键字成功获取图像;但是,当我仅通过"Cholesterol" and/or "levels".搜索时,无法执行我知道Mysql的喜欢 运营商,但我不确定它是否可以在这里应用。

 $dbdriver = "mysqli";
 $conn     = ADONewConnection($dbdriver);
 $conn->Connect($server, $user, $password, $database);
 $description = "cholesterol levels"; 
 $brecordSet = $conn->Execute('
     SELECT * FROM keywords 
     INNER JOIN images 
     WHERE description = ? AND keywords.id = images.keyword_id 
     ORDER BY RAND() 
     LIMIT 1
 ', $description);


 if (!$brecordSet)
   {

  print $conn->ErrorMsg();
  // Optionally
  print "Echo on failure";
   }
 else
   {
      $url  = $brecordSet->fields['url']; 
   }

   echo $url;  

3 个答案:

答案 0 :(得分:1)

$description = "cholesterol levels"; 
$brecordSet = $conn->Execute("SELECT * FROM keywords INNER JOIN images WHERE description LIKE '%".$description."%' AND keywords.id = images.keyword_id ORDER BY keywords.description ASC");

使用上述查询,您将获得存储在$ brecordset变量中的数组格式的记录。然后使用foreach循环,你可以遍历每个记录并访问它。希望这可以帮助你..

答案 1 :(得分:0)

对不起,我无法纪念..

中有问题

这一行:

  `url` varchar(2083) NOT NULL,

varchar的限制是250个字节。 您可以将类型更改为:

  `url` text(2083) NOT NULL,

答案 2 :(得分:0)

使用预备陈述。

$description = "%cholesterol levels%"; 
$brecordSet = $conn->Execute("
    SELECT * FROM keywords 
    INNER JOIN images 
    WHERE description LIKE :description 
      AND keywords.id = images.keyword_id 
    ORDER BY keywords.description ASC
    ", array('description' => $description));