Php 使用select prepared语句获取用户名
我写了这段代码,但它只是输出“1”。它应该输出所选用户的用户名Php 使用select prepared语句获取用户名,php,mysqli,prepared-statement,Php,Mysqli,Prepared Statement,我写了这段代码,但它只是输出“1”。它应该输出所选用户的用户名 $uid = $_GET['id']; if (empty($uid)) { echo "Error: Wrong input of values."; } else { $stmt = $conn->prepare("SELECT username FROM usersinfo WHERE id = ?"); $stmt->bind_param("s", $uid); $stmt->
$uid = $_GET['id'];
if (empty($uid)) {
echo "Error: Wrong input of values.";
} else {
$stmt = $conn->prepare("SELECT username FROM usersinfo WHERE id = ?");
$stmt->bind_param("s", $uid);
$stmt->execute();
$result = $stmt->fetch();
echo $result;
$stmt->close();
$conn->close();
}
这个呢,
我使用了
->fetch_assoc()
让我们在数组中获取结果,而不是->fetch()代码>问题中使用了哪一个
如果用户名有重复项:-那么
$uid = $_GET['id'];
if (empty($uid)) {
echo "Error: Wrong input of values.";
} else {
$stmt = $conn->prepare("SELECT username FROM usersinfo WHERE id = ?");
$stmt->bind_param("s", $uid);
$stmt->execute();
$result = $stmt->get_result();
while($row = $result->fetch_assoc()) { //fetch_assoc() function fetches a result row as an associative array - here we are putting it in a loop
echo $row['username'];
}
$stmt->close();
$conn->close();
}
如果我们只检索一个结果,假设在下面没有循环的情况下没有重复的结果
$uid = $_GET['id'];
if (empty($uid)) {
echo "Error: Wrong input of values.";
} else {
$stmt = $conn->prepare("SELECT username FROM usersinfo WHERE id = ?");
$stmt->bind_param("s", $uid);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc(); //fetch_assoc() function fetches a result row as an associative array
echo $row['username']; //we can specify just to return specific column i.e. username
$stmt->close();
$conn->close();
}
不会返回结果。该函数没有返回任何有用的信息。您需要做的是获得mysqli结果。有两种方法可以做到这一点
更简单的方法是:
$stmt = $conn->prepare("SELECT username FROM usersinfo WHERE id = ?");
$stmt->bind_param("s", $uid);
$stmt->execute();
$result = $stmt->get_result(); // Get the result of the above statement.
$firstRow = $result->fetch_array(); // Get the first result into an array
if ($firstRow) {
echo $firstRow[0];
//or
echo $firstRow['username'];
}
这里我们得到mysqli结果对象,然后请求一行
使用bind\u result()
的另一种方法:
在我看来,这更难理解。另外,如果你想得到更多的专栏,它会很快变得非常复杂
老实说,mysqli不是很友好,使用起来很麻烦。我强烈建议切换到PDO,但是如果您不能尝试将mysqli函数封装到某个类或函数中。YCS有一个这样的例子,我最近用包装器类编写了一个
我在mysqli类中添加了一个简单的方法,看看这些语句变得多么简单
class DBClass extends mysqli {
public function __construct(
$host = null,
$username = null,
$passwd = null,
$dbname = null,
$port = null,
$socket = null
) {
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
parent::__construct($host, $username, $passwd, $dbname, $port, $socket);
$this->set_charset('utf8mb4');
}
public function safeQuery(string $sql, array $params = []): ?array {
$stmt = $this->prepare($sql);
if ($params) {
$stmt->bind_param(str_repeat("s", count($params)), ...$params);
}
$stmt->execute();
if ($result = $stmt->get_result()) {
return $result->fetch_all(MYSQLI_BOTH);
}
return null;
}
}
用法示例:
$results = $conn->safeQuery("SELECT username FROM users WHERE id = ?", [$uid]);
if($results){
echo $results[0][0]; // first row, first column
// or
echo $results[0]['username']; // first row, get column by name
}
我根本看不到任何返回。@MarkusZeller我的意思是在“返回”中的“回音”,很抱歉我不擅长phpRead文档:我使用了->fetch_assoc()
让我们在数组中获取结果,而不是->fetch()代码>已在问题中使用,已采取行动
$results = $conn->safeQuery("SELECT username FROM users WHERE id = ?", [$uid]);
if($results){
echo $results[0][0]; // first row, first column
// or
echo $results[0]['username']; // first row, get column by name
}