Php mysqli_查询至少需要2个参数

Php mysqli_查询至少需要2个参数,php,mysqli,Php,Mysqli,此mysqli\u查询命令导致以下错误 mysqli_query("INSERT INTO `counter`.`hits` (`page_hits`) VALUES (1)"); 警告:mysqli_query()至少需要2个参数,其中1个在 此错误消息的含义是什么?如何修复它?来自 您将注意到$link和$query变量 这意味着您需要向函数传递有效的mysqli链接资源以及希望执行的查询。这让函数知道要使用哪个已建立到服务器的连接 可以使用以下方法创建链接资源: 仅

mysqli\u查询
命令导致以下错误

mysqli_query("INSERT INTO `counter`.`hits` (`page_hits`) VALUES (1)"); 
警告:mysqli_query()至少需要2个参数,其中1个在

此错误消息的含义是什么?如何修复它?

来自

您将注意到
$link
$query
变量

这意味着您需要向函数传递有效的mysqli链接资源以及希望执行的查询。这让函数知道要使用哪个已建立到服务器的连接

可以使用以下方法创建链接资源:

仅限过程样式:mysqli_connect()返回的链接标识符 或mysqli_init()


在前面提到的手册页面上可以找到一个如何执行的示例。

您似乎混淆了mysql\u查询和mysqli\u查询。前者接受sql语句作为第一个参数,而后者期望链接标识符(由Mysqli::connect创建)作为第一个参数,语句作为第二个参数


这两个扩展彼此不兼容。我建议您选择一个,阅读关于如何连接、执行查询等的手册页面,然后忘记另一个。你选择哪一个取决于你,mysqli功能更丰富,但因此更复杂。

你需要在页面的前面指定与数据库的连接。您应该将该变量放入查询中。假设您创建了一个名为
$con
的变量。那么你的代码应该是这样的

mysqli_query($con,"INSERT INTO `counter`.`hits` (`page_hits`) VALUES (1)"); 

mysqli_query
除了2个参数外,第一个变量是
mysqli_connect
等效变量,第二个变量是您提供的查询

$name1 = mysqli_connect(localhost,db_username ,db_pswd ,db_name );

$name2 = mysqli_query($name1,"INSERT INTO `counter`.`hits` (`page_hits`) VALUES (1)");

如果出现以下任何错误:

mysqli_query()至少需要2个参数,其中1个给定

mysqli_select_db()正好需要2个参数

mysqli_real_escape_string()正好需要两个参数

这意味着您尚未将强制参数传递给这些函数。MySQLi过程样式函数期望第一个参数是有效的MySQLi连接链接

例如,期望数据库链接作为第一个参数,实际SQL查询作为第二个参数

mysqli_query($mysqli, "INSERT INTO `counter`.`hits` (`page_hits`) VALUES (1)"); 
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli($host, $user, $pass, $db);
$mysqli->set_charset('utf8mb4');

$mysqli->query("INSERT INTO `counter`.`hits` (`page_hits`) VALUES (1)"); 
假设您在脚本的开头有这个或类似的连接代码

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = mysqli_connect($host, $user, $pass, $db);
mysqli_set_charset ($mysqli, 'utf8mb4');
您可以使用保存在
$mysqli
中的连接链接,并将其作为第一个参数传递

mysqli_query($mysqli, "INSERT INTO `counter`.`hits` (`page_hits`) VALUES (1)"); 
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli($host, $user, $pass, $db);
$mysqli->set_charset('utf8mb4');

$mysqli->query("INSERT INTO `counter`.`hits` (`page_hits`) VALUES (1)"); 
大多数mysqli过程函数都要求将连接作为参数传递。然而,一个更简单的选择是切换到面向对象的样式。在OOP中,您在对象上调用该方法,该对象仅将SQL作为单个参数传递

mysqli_query($mysqli, "INSERT INTO `counter`.`hits` (`page_hits`) VALUES (1)"); 
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli($host, $user, $pass, $db);
$mysqli->set_charset('utf8mb4');

$mysqli->query("INSERT INTO `counter`.`hits` (`page_hits`) VALUES (1)"); 
警告

您应该使用参数化的准备语句,而不是手动生成查询<代码>mysqli_query()仅在未向SQL传递任何输入时使用。每当您想要传递输入时(例如,
INSERT
),都必须使用参数绑定。您可以将您的
mysqli\u query()
调用替换为:

$stmt = $mysqli->prepare('INSERT INTO `counter`.`hits` (`page_hits`) VALUES (?)');
$stmt->bind_param('s', $hits);
$stmt->execute();

答案是什么(当你使用mysqli函数时,你需要明确地指定链接)注意,构造这样的查询将打开你的服务器进行SQL注入,这可能足以让一个脚本小子入侵你的服务器并窃取密码/将其用作僵尸网络的一部分/任何他们想要的东西