我有兩個(gè)表recordings,recording_metas我想選擇一些元數(shù)據(jù)并使用這些元數(shù)據(jù)中的外鍵來(lái)查找相應(yīng)的記錄。這就是我到目前為止所擁有的。$recording_sql輸出這個(gè)SELECT recording FROM recordings INNER JOIN recording_metas ON recordings.id = recording_metas.recording_id WHERE recording_metas.recording_id IN (SELECT recording_id, meta_key, meta_value FROM recording_metas WHERE meta_key=? AND meta_value=?) LIMIT ?但是為什么我會(huì)收到以下錯(cuò)誤?Fatal error: Uncaught Error: Call to a member function bind_param() on bool在這一行$stmt->bind_param(str_repeat('s', count($mixed)), ...$mixed);,我確信它$meta_sql可以工作,因?yàn)槲乙灿?LIMIT 指針單獨(dú)測(cè)試了它,所以如果我使用它們,指針工作正常$meta_sqlPHPfunction retrieveRecordingsByMetaData($connection, $config, $metas, $limit){ $where = ""; for ($i = 0; $i < count($metas); $i++) { $where .= "meta_key=? AND meta_value=? AND "; } $where = preg_replace('/ AND $/', '', $where); $meta_sql = "SELECT recording_id, meta_key, meta_value FROM $config->meta_table WHERE $where"; $recording_sql = "SELECT recording FROM $config->recording_table INNER JOIN $config->meta_table ON $config->recording_table.id = $config->meta_table.recording_id WHERE $config->meta_table.recording_id IN ($meta_sql) LIMIT ?"; echo ($recording_sql); $stmt = $connection->prepare($recording_sql); $mixed = associativeToArrayMixed($metas); array_push($mixed, $limit); $stmt->bind_param(str_repeat('s', count($mixed)), ...$mixed); if (!$stmt->execute()) { echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error . " \r\n"; die(); } $result = $stmt->get_result(); if ($result->num_rows > 0) { while ($row = $result->fetch_assoc()) { echo "recording found"; } } else { echo "0 results \r\n"; }}
1 回答

婷婷同學(xué)_
TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊
您必須在 where 子句中只選擇一列
WHERE recording_metas.recording_id IN (SELECT recording_id FROM recording_metas WHERE meta_key=? AND meta_value=?) LIMIT ?
如果您想選擇多于一列,則必須使用此處所示的元組 https://stackoverflow.com/a/44706402/5193536
- 1 回答
- 0 關(guān)注
- 246 瀏覽
添加回答
舉報(bào)
0/150
提交
取消