我正在尝试使用包含" IN"的准备语句进行mysql查询。条款。 这是声明:
$stmt1 = $c->db->prepare("SELECT ITEM_URL,VIRALITY FROM RSSINGEST WHERE userid=(?) AND ITEM_URL IN (SELECT url FROM person_url WHERE person=(?) AND userid=(?))");
$stmt1->bind_param("sss", $userid,$name,$userid);
但是我总是得到错误:"调用成员函数bind_param()..."当准备好的陈述错误时发生。
基本上我试图找到一个用户的所有网址,这些用户在另一个表中也有这些网址。在另一个名为" person_url"每个条目都有一个" person"。我只想要那些特殊的人#34;正如你在声明中所看到的那样。
也许有人可以告诉我是否有其他方法可以做到这一点或错误在哪里?
编辑1:userid是一个字符串,它们的名称可能会产生误导。
编辑2:为两个表创建语句:
CREATE TABLE IF NOT EXISTS `rssingest` (
`item_id` varchar(500) CHARACTER SET latin1 NOT NULL,
`feed_url` varchar(512) CHARACTER SET latin1 DEFAULT NULL,
`item_title` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
`item_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`item_url` varchar(512) CHARACTER SET latin1 NOT NULL,
`item_category_id` int(11) DEFAULT NULL,
`fetch_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`fb_share` int(11) DEFAULT NULL,
`fb_like` int(11) DEFAULT NULL,
`fb_comment` int(11) DEFAULT NULL,
`tw_count` int(11) DEFAULT NULL,
`pinterest` int(11) DEFAULT NULL,
`linkedin` int(11) DEFAULT NULL,
`googleplus` int(11) DEFAULT NULL,
`stumbleupon` int(11) DEFAULT NULL,
`virality` int(11) DEFAULT NULL,
`userID` varchar(200) COLLATE utf8mb4_bin DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
CREATE TABLE IF NOT EXISTS `people_url` (
`person` varchar(100) CHARACTER SET latin1 NOT NULL,
`url` varchar(500) CHARACTER SET latin1 NOT NULL,
`virality` int(20) NOT NULL,
`insertdate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`userID` varchar(200) COLLATE utf8mb4_bin DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
编辑3:完全错误
致命错误:在 C:\ xampp \ htdocs \ monitorUser \ websiteBuilder.php 的行上的非对象上调用成员函数bind_param() > 163
编辑4:最好的隧道视野。我在声明中写了person_url而不是people_url。谢谢大家。
答案 0 :(得分:0)
$stmt1
中的查询应为
$stmt1 = $c->db->prepare(
"SELECT item_url, virality
FROM rssingest
WHERE userid=(?)
AND item_url IN (SELECT url FROM people_url WHERE person=(?) AND userid=(?))"
);