Захват данных из запроса

#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 для захвата результатов