2015-10-19 4 views
0

Я пытаюсь сделать запрос mysql с подготовленным оператором, включающим предложение «IN». Это заявление:php in не работает для подготовленного оператора

$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», каждая запись имеет также «личность». Я хочу только тех, у кого есть специальный «человек», как вы можете видеть в заявлении.

Возможно, кто-нибудь может сказать мне, есть ли другой способ сделать это или где ошибка?

EDIT 1: userid - это строка, они могут вводить в заблуждение.

EDIT 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; 

EDIT 3: Полное Ошибка

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

EDIT 4: Туннель видение на его лучшим. Я написал person_url в заявлении вместо people_url. Спасибо всем.

+0

'userid' не является INT? –

+0

no userid, вероятно, плохое имя, но это строка – 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=(?))" 
); 
Смежные вопросы