2015-10-19 37 views
0

我正在尝试使用包含“IN”子句的预处理语句进行mysql查询。 这是结:在子句中的PHP没有为预处理语句工作

$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()......”的时候,准备的说法是错误的发生。

基本上我试图从一个用户那里找到所有的URL,这些用户在另一个表中也有这些URL。在这个名为“person_url”的其他表中,每个条目都有一个“人”。正如你在声明中看到的,我只想要那些有特殊“人”的人。

也许有人可以告诉我,如果有其他方式来做到这一点或错误是什么?

编辑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:完全错误

Fatal error: Call to a member function bind_param() on a non-object in C:\xampp\htdocs\monitorUser\websiteBuilder.php on line 163

编辑4。我在声明中写了person_url而不是people_url。谢谢大家。

+0

'userid'不是INT? –

+0

没有用户名可能是一个坏名字,但它是一个字符串 – user3410232

+0

告诉我们两个表的CREATE TABLE语句请 – Alex

回答

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=(?))" 
);