你好我一直有在使用中的一些麻煩,其中使用MySQLi的條款,這是我的查詢:庫MySQLi在使用在有
SELECT * FROM core_tags WHERE tag_id IN (1,2,3,4,5) GROUP BY tag_id ORDER BY tag_popularity ASC
如果我運行這個在PHP我聯繫,然後我按照我的預期得到5個結果。但是,如果我使用下面的代碼在PHP中運行它,我只會得到tag_id'1'的一個結果。
這是我的PHP。最初我是在課堂上使用函數來運行它,但是我手工編寫了代碼來測試它在我的函數中不僅僅是一個錯誤,而是出現了同樣的問題。
$mysqli = new mysqli(DB_SERVER, DB_NAME, DB_PASSWORD, DB_NAME); $rawQuery = 'SELECT * FROM core_tags WHERE tag_id IN (?) GROUP BY tag_id ORDER BY tag_popularity ASC'; $stmt = $mysqli->prepare($rawQuery); $stmt->bind_param("s", $tag_ids); $tag_ids = "1,2,3,4,5"; $stmt->execute(); $stmt->bind_result($tag_id, $tag_name, $tag_desc, $tag_popularity); while ($stmt->fetch()) { printf ("%s\n", $tag_name); } $stmt->close(); die();
任何人都知道爲什麼mysqli版本只返回一行?使用mysql而不是mysqli也可以,與PHP My Admin相同。
乾杯,這是我的想法可能需要被做,但感謝確定它應該工作。一個想法,是否有使用implode和array_full而不是像substr(str_repeat(「?,」,count($ ids)),0,-1)的原因;我不知道哪些更好的表現明智等 – Rob 2010-07-16 23:40:17
@Rob,個人喜好。我喜歡使用數組。我會考慮關於性能問題的一個微觀優化問題。與數據庫調用相比,PHP執行任何一個操作的時間都是微乎其微的.-)。另外,請參閱更新的答案,我提供了兩種解決方法。 – 2010-07-16 23:43:17
對於額外的例子來說,這是我的另一種選擇,但是我已經轉移到準備好的陳述中,我不想再次離開它。一件事。你的第一個例子給出了這個錯誤: 警告:mysqli_stmt :: bind_param()[mysqli-stmt.bind-param]:變量數量與預準備語句中的參數數量不匹配 我假設因爲它使用相同的變量每一次,因此不能被引用或類似的東西? – Rob 2010-07-16 23:49:21