Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.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 preg_将名称和标题与数据库中的信息进行匹配_Php_Mysql_Pdo - Fatal编程技术网

Php preg_将名称和标题与数据库中的信息进行匹配

Php preg_将名称和标题与数据库中的信息进行匹配,php,mysql,pdo,Php,Mysql,Pdo,我正在尝试制作一个脚本,以获取有关DJ的信息。 我要做的是将DJ标题与表中的DJ名称匹配。 如果dj名称存在,那么我希望选择该行并使用该信息 我首先做的是在一个数组中列出dj,然后我想将其与标题匹配,如果有匹配,我想获得信息 我现在的剧本是: $ps = $this->db->prepare("SELECT djname FROM `djcrew`"); $ps->setFetchMode(PDO::FETCH_ASSOC); $ps->execute(); $selec

我正在尝试制作一个脚本,以获取有关DJ的信息。 我要做的是将DJ标题与表中的DJ名称匹配。 如果dj名称存在,那么我希望选择该行并使用该信息

我首先做的是在一个数组中列出dj,然后我想将其与标题匹配,如果有匹配,我想获得信息

我现在的剧本是:

$ps = $this->db->prepare("SELECT djname FROM `djcrew`");
$ps->setFetchMode(PDO::FETCH_ASSOC);
$ps->execute();
$selectit = $ps->fetchALL();
$result01 = preg_match('/'.$selectit.'/', $servertitle, $matches);
$ps01 = $this->db->prepare('SELECT * FROM `djcrew` WHERE `djname` = :djname');
$ps01->bindParam(':djname', $matches[0], PDO::PARAM_STR);
$ps01->setFetchMode(PDO::FETCH_ASSOC);
$ps01->execute();
$data01 = $ps01->fetchAll();
问题是我现在得到的是错误的数组到字符串的转换 selectit的输出为:

Array
(
    [0] => Array
        (
            [djname] => test04
        )

    [1] => Array
        (
            [djname] => test03
        )

    [2] => Array
        (
            [djname] => test02
        )

    [3] => Array
        (
            [djname] => Test01
        )

)
我试过很多方法,但都不能成功

[编辑]添加mysql表

mysql表的转储

CREATE TABLE IF NOT EXISTS `djcrew` (
`id` int(11) NOT NULL,
  `djname` varchar(48) NOT NULL DEFAULT '',
  `name` varchar(48) NOT NULL DEFAULT '',
  `hobbies` varchar(48) NOT NULL DEFAULT '',
  `other` text NOT NULL,
  `facebook` varchar(48) NOT NULL DEFAULT '',
  `twitter` varchar(48) NOT NULL DEFAULT '',
  `request` varchar(2) NOT NULL DEFAULT '1',
  `picname` varchar(32) NOT NULL DEFAULT '',
  `active` varchar(32) NOT NULL DEFAULT '1'
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

INSERT INTO `djcrew` (`id`, `djname`, `name`, `hobbies`, `other`, `facebook`, `twitter`, `request`, `picname`, `active`) VALUES
(1, 'Test01', 'Test - DJ', '', '', '', '', '1', 'test01', '0'),
(2, 'Test02', 'Testing - DJ', '', '', '', '', '1', 'test02', '1'),
我想得到的是djname=。。名称=。。picname=

$arr = array('djname' => $data01['djname'], 'name' => $data01['username'], 'picname' => $data01['picname']);

我想我已经找到了你最初问题的答案,如果这仍然是同一个问题的话

$ps = $this->db->prepare("SELECT djname FROM `djcrew`");
$ps->execute();
$selectit = $ps->fetchALL(PDO::FETCH_ASSOC);

$djs= array();

foreach($selectit as $row) {
    $djs[] = $row['djname'];
}

if(in_array($servertitle, $djs) {
    $sql = 'SELECT * FROM djcrew WHERE djname IN ("' . implode('", "', $djs) . '")';

    $stmt = $db->prepare($sql);
    $stmt->execute();
    $result = $stmt->fetchAll();
}
或者如果
$servertitle
是一个数组

if(array_intersect($servertitle), $djs)) {
    $sql = 'SELECT * FROM djcrew WHERE djname IN ("' . implode('", "', $djs) . '")';

    $stmt = $db->prepare($sql);
    $stmt->execute();
    $result = $stmt->fetchAll();
}

你知道什么是数组,什么方法首先是
PDOStatement::fetchAll()
吗?给我们介绍一下表的结构、数据示例和预期结果……添加了数据库信息,以及我想用itTry打印$selectit做什么,这将是一个数组。我已经这样做了,并添加到问题中,这几乎是我想要的。我错过的是,数据库中存在与servertitle和djname的匹配。servertitle就像为您播放音乐的dj test(这就是我想使用preg_match的地方),我从shoutcast服务器获得$servertitle的值。我想将$servertitle(参见上面的脚本)与dj的列表进行匹配。$servertitle的属性类似于“DJ Test为您播放音乐”更新的代码,因此$servertitle将是一个字符串,并检查数组是否存在匹配项。如果是这样的话,我试过代码的下一部分,结果是一样的。我得到了所有的行,字符串$servertitle不匹配。