如何在PHP中调试"Object of class mysqli could not be converted to string"错误?



我正在做我的学术项目,我被困在我的搜索功能中,我试图运行的查询在MySQL服务器中运行顺利,但是当我试图在应用程序上运行它时,它给了我这样的错误:

可捕获的致命错误:在..........

中mysqli类的对象无法转换为字符串

代码片段如下:

数据库连接:

<?php
error_reporting(E_ALL);
define("DBNAME","foodfood");
global $con;
$servername = "localhost";
$username = "root";
$password = "passport";
// Create connection
$con = mysqli_connect($servername, $username, $password);
// Check connection
if (!$con) {
    die("Connection failed: " . mysqli_connect_error());
}
?>

导致错误的查询:

function find_food ($keysearch, $con) {
        $find_query = "SELECT `vendor`.`v_id`,`vendor`.`v_name`,`vendor`.`v_img`,`contacts`.`cont_addr`,`contacts`.`cont_phn`,`fooditem`.`item_name`,`fooditem`.`fi_price`,`fooditem`.`fc_desc` FROM vendor
LEFT JOIN ".DBNAME.".`contacts` ON `vendor`.`cont_id` = `contacts`.`cont_id` 
LEFT JOIN ".DBNAME.".`fooditem` ON `vendor`.`v_id` = `fooditem`.`v_id`  WHERE `vendor`.`v_name` LIKE '%".$keysearch."%' OR `fooditem`.`item_name` LIKE '%".$keysearch."%';";
//run query
$fill_food = mysqli_query($con, $find_query);
}

现在,当我运行这段代码时,通过输入搜索变量$keysearch(这些变量会过滤任何可能的注入攻击)。我得到的错误是:

LEFT JOIN ".DBNAME.".`fooditem` ON `vendor`.`v_id` = `fooditem`.`v_id`  WHERE `vendor`.`v_name` LIKE '%".$keysearch."%' OR `fooditem`.`item_name` LIKE '%".$keysearch."%';";

更新:我调试了代码并提出了一些更多的信息。我对$关键字所在的搜索页面中的变量进行了var_dump。一切似乎很好,我得到输入的搜索字符串在var_dump。现在,当这个关键字在我输入SQL语句的下一个文件中被解析时,这变得有趣了。我得到了这个关键字的var_dump的输出,现在我可以看到mysqli对象如下所示:

object(mysqli)#1 (19) { ["affected_rows"]=> int(0) ["client_info"]=> string(79) "mysqlnd 5.0.11-dev - 20120503 - $Id: f373ea5dd5538761406a8022a4b8a374418b240e $" ["client_version"]=> int(50011) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["field_count"]=> int(0) ["host_info"]=> string(20) "localhost via TCP/IP" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(6) "5.6.21" ["server_version"]=> int(50621) ["stat"]=> string(130) "Uptime: 550 Threads: 1 Questions: 5 Slow queries: 0 Opens: 70 Flush tables: 1 Open tables: 63 Queries per second avg: 0.009" ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(4) ["warning_count"]=> int(0) } 

现在,当我把SQL查询在搜索页面本身,我没有得到指定的错误。但是我现在准备好执行SQL查询,如下所示:

string(413) "SELECT `vendor`.`v_id`,`vendor`.`v_name`,`vendor`.`v_img`,`contacts`.`cont_addr`,`contacts`.`cont_phn`,`fooditem`.`item_name`,`fooditem`.`fi_price`,`fooditem`.`fc_desc` FROM vendor LEFT JOIN stfood.`contacts` ON `vendor`.`cont_id` = `contacts`.`cont_id` LEFT JOIN stfood.`fooditem` ON `vendor`.`v_id` = `fooditem`.`v_id` WHERE stfood.`vendor`.`v_name` LIKE '%vend%' OR stfood`fooditem`.`item_name` LIKE '%vend%';" 

现在,如果我把这个查询并把它粘贴在mysql服务器作为查询,查询失败,如果我删除双引号("),然后运行查询,它成功运行。现在我在其他函数中也有类似的语句,它们运行正常,但不是这个。谁能指导我在哪里我犯了一个错误??

最后,我做到了…有很多外键的SQL查询导致问题,我在脚本中做了一些改变。*将搜索词和SQL查询放在同一页面上。* SQL查询的小变化。*在mysqli_result对象上使用mysqli_num_rows,将结果存储在变量中并回显到表中。唷 ........

相关内容

最新更新