我正在做我的学术项目,我被困在我的搜索功能中,我试图运行的查询在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,将结果存储在变量中并回显到表中。唷 ........