У меня есть форма поиска, которая позволяет получить имя пользователя пользователя, однако я не могу понять, как заставить его вернуться больше, я хочу, чтобы он отображал также имена и фамилии.
Ниже приведен код в минуту, который работает, но когда я пытаюсь добавить больше переменных, например if ($stmt = $connection->prepare ("SELECT Username FROM users WHERE Username LIKE?"))
это не вернуть что-либо вообще и просит вставить поисковый запрос.
Я также пробовал, if ($stmt = $connection->prepare ("SELECT Username FROM users WHERE Username LIKE %?%"))
И LIKE "%?%"))
, Но результатов нет.
search.php
<?php
include 'connection.php';
if(isset($_POST['searchsubmit']))
{
include 'searchform.php';
$name=$_POST['name'];
if ($stmt = $connection->prepare ("SELECT Username FROM users WHERE Username LIKE ?"))
{
$stmt->bind_param('s', $name);
$stmt->execute();
$stmt->bind_result($personresult);
$stmt->fetch();
?>
<center>
<BR>
<h1>Search Results are as follows:</h1>
<h2>USERNAMES</h2>
<BR>
<?php
print_r($personresult);
?>
</center>
<?php
}
else
{
echo "<p>Please enter a search query</p>";
}
}
else
{
echo "NOT SET!";
}
Вы звоните только по имени Username
. Вам нужно позвонить *
SELECT * FROM users WHERE Username LIKE ?
Это мой личный сценарий, который я использую:
<?php
$dbservername = "localhost";
$dbusername = "db_user";
$dbpassword = "pass";
$dbname = "db";
// Create connection
$conn = new mysqli($dbservername, $dbusername, $dbpassword, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
if (!empty($_POST["username"])) {
$username = $_POST["username"];
}
if (!empty($_POST["password"])) {
$password = $_POST["password"];
}
$sql = "SELECT * FROM users";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
echo $row["Username"] . " " . $row["Firstname"] . " " . $row["Lastname"] . "<br>";
if ($row["Username"] == $username && $row["Password"] == $password) {
echo "success";
// do more stuff here like set session etc
} else {
$echo "incorrect username and/or password";
}
}
}
?>
Вы инициализируете объект statement с помощью mysqli_stmt_init?
Если сервер базы данных не может успешно подготовить оператор, PDO :: prepare() возвращает FALSE или испускает PDOException (в зависимости от обработки ошибок)
добавьте эту строку в connection.php
сразу после создания объекта подключения:
$connection->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
По крайней мере, вы можете отслеживать возможные ошибки
<?php
include 'connection.php';
if( isset( $_POST['searchsubmit'] ) ) {
include 'searchform.php';
$name=$_POST['name'];
if ( $stmt = $connection->prepare ("SELECT 'Username','firstname','lastname' FROM 'users' WHERE 'Username' LIKE ?") ) {
/* not 100% sure about whether this is required here like this or not but usually a like expression uses '%' as a wildcard */
$var='%'.$name'.%';
$stmt->bind_param('s', $var );
$res=$stmt->execute();
/* 3 columns selected in query, 3 columns bound in results */
$stmt->bind_result( $personresult, $firstname, $lastname );
if( $res ){
$stmt->fetch();
echo "
<center>
<BR>
<h1>Search Results are as follows:</h1>
<h2>USERNAMES</h2><!-- 3 columns/variables -->
{$personresult},{$firstname},{$lastname}
<BR>
</center>";
}
} else {
echo "<p>Please enter a search query</p>";
}
} else {
echo "NOT SET!";
}
$stmt->close();
$connection->close();
?>
select
иfrom
- это то, что вы выбираете. Так сselect Username FROM users WHERE Username LIKE ?
Вы только выбираетеusername
, добавляете столбцы, которые вы хотите в этом списке, разделенные запятыми. Если ваше имя пользователя не точное, вам нужно добавить%
s к вашей переменной$name
.