#php #mysql
#php #mysql
Вопрос:
Я пытаюсь изучить PHP, и для этого я пытаюсь создать средство сокращения URL. Прямо сейчас вы можете ввести ссылку, и она вводит ее в базу данных. Это не рандомизирует строку, но я собираюсь сделать это после. (Я изменил их сам, чтобы избежать проблем).
Вот моя таблица в настоящее время (моя таблица называется «urls»):
Затем, когда вы переходите к (для меня localhost) /somepath, он автоматически перенаправляется на /process.php?id=somepath
В process.php он проверяет, существует ли указанный путь (somepath) в базе данных, затем получает его исходное значение. Проблема, с которой я сталкиваюсь, заключается в получении исходного значения. Опять же, я новичок в PHP, и мне трудно понять, как работает запрос.
$query = "SELECT original FROM urls WHERE new = '$new'";
$result = $conn->query($query);
Как мне получить информацию из $result? Или я должен получать их из $query после $result, потому что это просто запускает его?
Пожалуйста, объясните, почему вы используете что, я этого не понимаю.
Спасибо, извините, если это действительно глупый вопрос.
Комментарии:
1. ПРЕДУПРЕЖДЕНИЕ : при использовании
mysqli
вы должны использовать параметризованные запросы иbind_param
добавлять пользовательские данные в свой запрос. НЕ используйте для этого интерполяцию или конкатенацию строк, поскольку вы создали серьезную ошибку SQL-инъекции . НИКОГДА не помещайте$_POST
$_GET
данные или непосредственно в запрос, это может быть очень вредно, если кто-то попытается воспользоваться вашей ошибкой.
Ответ №1:
В этом коде я использовал object oriented approach
для prepared statement
или, если вы все еще в procedural style
, вы все равно можете использовать это.
Проверьте эту ссылку: http://php.net/manual/en/mysqli.prepare.php
Итак, в основном, что происходит в этом коде, так это то, что запрос готовится, а затем вы привязываете используемый параметр (этот стиль — один из способов избежать SQL-инъекций, поскольку входные данные автоматически экранируются). Результат будет сначала сохранен в переменной $original
, затем я подсчитал, сколько строк вернул запрос. Если оно больше 1, это означает, что есть совпадение, тогда, если 0, совпадения нет.
Если есть совпадение, оно отобразит значение переменной $original
.
<?php
$stmt = $conn -> prepare("SELECT original FROM urls WHERE new = ?");
$stmt -> bind_param('s',$new);
$stmt -> execute();
$stmt -> bind_result($original);
$stmt -> fetch();
$stmt -> store_result();
$res = $stmt -> num_rows();
$stmt -> close();
if($res > 0){
echo $original;
}
else{
//not found
}
?>
Ответ №2:
Используется fetch_assoc()
для захвата данных из вашей таблицы в объектно-ориентированном MySQLi.
Попробуйте это:
$query = "SELECT original FROM urls WHERE new = '$new'";
$result = $conn->query($query);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 results";
}
Вы также можете поместить результат в таблицу HTML:
if ($result->num_rows > 0) {
echo "<table><tr><th>ID</th><th>Name</th></tr>";
// output data of each row
while($row = $result->fetch_assoc()) {
echo "<tr><td>".$row["id"]."</td><td>".$row["firstname"]." ".$row["lastname"]."</td></tr>";
}
echo "</table>";
} else {
echo "0 results";
}
Ответ №3:
$query = "SELECT original FROM urls WHERE new = '$new'";
$result = $conn->query($query);
$rows = mysql_fetch_array($result);
foreach($rows as $row){
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
Вы можете использовать либо mysql_fetch_array
или mysql_fetch_assoc
для захвата результатов