使用PHP对象访问MySQL数据库时出错(嵌套查询)

时间:2017-06-29 19:47:36

标签: php sql mysqli sphinx

我想从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);
    }

}

谢谢:)

1 个答案:

答案 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");