如果您遇到以下任何错误:
mysqli_query() 至少需要 2 个参数,给定 1 个
mysqli_select_db() 只需要 2 个参数
mysqli_real_escape_string() 只需要 2 个参数
这意味着您没有将强制参数传递给这些函数。 MySQLi 过程式函数要求第一个参数是有效的 MySQLi 连接链接。
例如,mysqli_query 期望数据库链接作为第一个参数,实际 SQL 查询作为第二个参数。
假设您在脚本开头的某处有此或类似的连接代码。
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 过程函数都需要将连接作为参数传递。但是,更简单的选择是切换到面向对象的样式。在 OOP 中,您调用对象上的方法,仅将 SQL 作为单个参数传递。
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_query() 电话替换为:
$stmt = $mysqli->prepare('INSERT INTO `counter`.`hits` (`page_hits`) VALUES (?)');
$stmt->bind_param('s', $hits);
$stmt->execute();