我想从Sphinx服务器获取一些数据并将其传递给MySQL来执行一些查询。我是PHP的新手,所以我可能在这里遗漏了一些东西。我找了similar questions,但找不到任何内容,也许你可以帮助我。
错误发生在第一个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)
好的$ row包含一个对象,因此必须使用它,也许
$rown = (string)$row->names;
...假设您希望变量包含&#39;名称&#39;属性你刚从Sphinx索引中选择。
至于mysql EXISTS(),不知道你在这里做了什么,似乎很困惑。你如何构建它目前表明&#39;名字&#39; sphinx中的属性包含一个完整的SELECT查询,mysql可以为exists条件执行。这似乎不太可能。
猜测你对更正常的查询有意义,比如
$mquery = "SELECT text FROM claims WHERE text LIKE '%$rown%' LIMIT 0,1000";
但这可能会受到SQL注入的影响,特别是如果名称可能包含单引号。所以应该逃脱它。也许
$rown = mysqli_real_escape_string($mysqlcon, $row->names);
但是可能值得阅读准备好的查询。
btw,&#39;错误&#39;你得到了,是因为你创建了一个无效的查询而没有处理它。所以$ mysqlresults是FALSE。
$mysqlresults = mysqli_query($mysqlcon, $mquery) or die("Mysql Error: ".mysqli_error($link)."\n");