2015-10-19 38 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=(?))" 
);