我基本上试图从表单上的多个字段中搜索表单,但不断收到错误 database_conn
<?php
$conn = mysqli_connect('xxxx', 'xxxxx', 'xxxxx', 'xxxxxx');
if (mysqli_connect_errno()) {
echo "<p>Connection failed:".mysqli_connect_error()."</p>\n";
}
?>
php更新 - 我现在得到的错误是&#34;在非对象上调用成员函数fetch_assoc()&#34;
<?php
include 'database_conn.php';
$shoeSize = isset($_GET['shoeSize']) ? $_GET['shoeSize'] : null ;
$brandID = isset($_GET['brandID']) ? $_GET['brandID'] : null ;
$gender = isset($_GET['gender']) ? $_GET['gender'] : null ;
$sqlShoes = "SELECT shoeSize, brandID, gender FROM sh_shoe WHERE 1";
$sqlCondition = "";
IF($shoeSize != null ) {
$sqlCondition = $sqlCondition . "SELECT shoeSize FROM sh_shoe WHERE 1 AND shoeSize = $shoeSize";
}
IF($brandID != null ) {
$sqlCondition = $sqlCondition . "SELECT brandID FROM sh_shoe WHERE 1 AND brandID = $brandID";
}
IF($gender != null ) {
$sqlCondition = $sqlCondition . "SELECT gender FROM sh_shoe WHERE 1 AND gender = $gender";
}
$sqlSearch = $sqlShoes . $sqlCondition;
$result = $mysqli->query($sqlSearch);
$rowShoes = $result->fetch_assoc();
// then to output
echo "<p>{$rowShoes['shoeSize']}</p>";
答案 0 :(得分:1)
看到最初定义 $mysqli
的位置将是一个很好的起点。一些也可能导致代码失败的问题是......
$mysqli
不是对象,它是在global
行定义的空变量。 global
用于在函数中访问变量,看起来不需要它。
您当前的联系是$conn
。这是在程序上建立的。您的代码正在使用对象方法,因此我认为在您的db文件中将$conn
行更改为:
$mysqli = new mysqli('xxxx', 'xxxxx', 'xxxxx', 'xxxxxx');
除非您在其他文件中使用$conn
。如果这是你的第一个文件,这应该没问题。
此外:
+
在PHP中没有连接,我认为这是JS语法。 .
是如何连接的。
一旦更正,但您的查询将被错误地构建。您将构建一个查询
SELECT shoeSize, brandID, gender FROM sh_shoe WHERE 1SELECT shoeSize FROM sh_shoe WHERE 1 AND shoeSize = $shoeSize
您需要将用户输入分开,并仅将要搜索的列附加到查询中。
一个粗略的未经测试的答案,它也应该关闭整个SQL注入。
include 'database_conn.php';
global $mysqli;
$query = "SELECT shoeSize, brandID, gender FROM sh_shoe";
if(!empty($_GET['shoeSize'])) {
$where[] = ' shoeSize = ' . $mysqli->real_escape_string($_GET['shoeSize']);
}
if(!empty($_GET['brandID'])) {
$where[] = ' brandID = ' . $mysqli->real_escape_string($_GET['brandID']);
}
if(!empty($_GET['gender'])) {
$where[] = ' gender = ' . $mysqli->real_escape_string($_GET['gender']);
}
if(!empty($where)) {
$query = $query . ' WHERE ' . implode(' and ', $where);
}
$result = $mysqli->query($query);
这也假设所有字段都是原始查询所用的整数。如果它们不是输入,则应该用单引号括起来。
$_GET['gender']
male
/ female
应为:
if(!empty($_GET['gender'])) {
$where[] = ' gender = \'' . $mysqli->real_escape_string($_GET['gender']) . "'";
}
因为没有引号,查询是
gender = male
无效。
gender = 'male'
是正确的查询。