2017-06-29 28 views
0

我想從Sphinx服務器獲取一些數據並將其傳遞給MySQL以執行一些查詢。我是PHP的新手,所以我可能在這裏錯過了一些東西。我尋找similarquestions但找不到任何東西,所以也許你可以幫助我。使用PHP對象訪問MySQL數據庫時出錯(嵌套查詢)

錯誤發生在第一個while。我很確定這是由於$rown變量造成的,但不知道原因。 (我已經驗證了我可以從連接中檢索數據,因此它傳遞的是錯誤所在的數據 - 可能是查詢的sql語法,但看起來很好)。

編輯該代碼感謝下面的評論,現在我得到的錯誤:Warning: mysqli_fetch_object() expects parameter 1 to be mysqli_result, boolean given in C:\Apache24\htdocs\test3.php on line 20。這是因爲查詢失敗,我仍然懷疑是因爲$rown

$sphinxcon = mysqli_connect... 
$mysqlcon = mysqli_connect... 

$query  = "SELECT names FROM iproducts LIMIT 0,1000"; 
$raw_results= mysqli_query($sphinxcon, $query); 

//Until here works ok, now I want to pass $raw_results to MySQL 

while ($row = mysqli_fetch_object($raw_results)) { 
    $rown = $row->names; 
    $mquery = "SELECT text FROM claims WHERE EXISTS ($rown) LIMIT 0,1000"; 

    $mysqlresults = mysqli_query($mysqlcon, $mquery); 

    while ($final = mysqli_fetch_object($mysqlresults)) //this is line 20 
    { 
     printf ("%s<br />", $final->text); 
    } 

} 

謝謝:)

+0

缺少分號...... –

+0

這有很多錯誤。我會閱讀手冊 – bassxzero

+0

@AlexHowansky在哪裏? - bassxzero你是什麼意思? – Hoju

回答

0

那麼$行包含一個對象,因此將不得不使用它是這樣的,也許

$rown = (string)$row->names; 

...假設你希望變量包含'名稱'屬性,你只是從獅身人面像索引中選擇。

至於mysql EXISTS(),不知道你真的在這裏做什麼,似乎困惑。目前如何構建它,表明sphinx中的'names'屬性包含一個完整的SELECT查詢,mysql可以爲存在條件執行。這似乎不太可能。

猜測你的意思更爲正常的查詢像

$mquery = "SELECT text FROM claims WHERE text LIKE '%$rown%' LIMIT 0,1000"; 

但是,這是受到SQL注入,particully如果名稱中可能包含單引號。 SO應該逃脫它。也許

$rown = mysqli_real_escape_string($mysqlcon, $row->names); 

但可能值得閱讀準備好的查詢。

btw,你得到的'錯誤'是因爲你創建了一個無效的查詢而沒有處理它。所以$ mysqlresults是假的。

$mysqlresults = mysqli_query($mysqlcon, $mquery) or die("Mysql Error: ".mysqli_error($link)."\n"); 
+0

嘿巴里,你無處不在;)我從這裏得到了EXITS()的想法。com/wp-content/uploads/VennDiagram1.pdf我不在乎SQL注入(至少現在不行),因爲我在本地做了一切(教室數據分析項目)。我正在運行'$ mquery',它看起來很慢,但它正在運行!謝謝! :)事情是,這是在Apache中運行,所以我失去了關於獅身人面像索引的大部分好東西(速度)......我真的希望這可以在獅身人面像完成:) – Hoju

+0

現在我想到了,我使用的方法沒有意義,我應該從Sphinx查詢專利文本和產品名稱,然後進行JOIN,你不覺得嗎? – Hoju

+0

好吧,它看起來很奇怪,有反向使用系統。選擇名稱列表會使得查詢成爲MySQL查詢(不是獅身人面像!)。 '在文本框內搜索'應該是一個Sphinx查詢(不是Mysql) - sphinx是一個全文查詢引擎,所以比mysql LIKE查詢運行查詢要快得多! – barryhunter