Лучшая практика, которую вы можете ожидать снова и снова слышать от опытных волонтеров StackOverflow, - это использовать подготовленные заявления для обеспечения безопасности и надежности запросов.
В вашем случае я рекомендую следующий фрагмент, который не толькобезопасно выполняет ваш SELECT
запрос, но также предоставляет информативные диагностические / отладочные контрольные точки на протяжении всего процесса и позволяет обрабатывать набор результатов, представленный многомерным ассоциативным массивом.
$_GET['name'] = "vinay's name";
$string1 = $_GET['name'];
if (!$conn = new mysqli("host", "user", "pass", "db")) {
echo "Database Connection Error: " , $conn->connect_error; // do not show this to public
} elseif (!$stmt = $conn->prepare("SELECT * FROM info WHERE name = ?")) {
echo "Prepare Syntax Error: " , $conn->error; // do not show this to public
} elseif (!$stmt->bind_param("s", $string1) || !$stmt->execute()) {
echo "Statement Error: " , $stmt->error; // do not show this to public
}else{
$result = $stmt->get_result();
while($row = $result->fetch_array(MYSQLI_ASSOC)){
var_export($row); // do what you like here
}
}
Важно отметитьчто использование $stmt->bind_result($result)
(как в ответе Zenexer's) не будет работать (генерирует $result = NULL
), если таблица info
содержит более одного столбца (я предполагаю, что он будет работать с одним столбцом, но я не проверял);и он сгенерирует Warning из-за дисбаланса между числом выбранных столбцов из SELECT *
и числом назначенных переменных.
Warning: mysqli_stmt :: bind_result (): Количество переменных связывания не совпадает с числом полей в подготовленном выражении
Если вы хотите воспользоваться преимуществами явного связывания переменной результата, вы должны указать нужные столбцы в предложении SELECT
как это:
if (!$conn = new mysqli("host", "user", "pass", "db")) {
echo "Database Connection Error: " , $conn->connect_error; // do not show this to public
} elseif (!$stmt = $conn->prepare("SELECT id FROM info WHERE name = ?")) {
echo "Prepare Syntax Error: " , $conn->error; // do not show this to public
} else {
if (!$stmt->bind_param("s", $string1) || !$stmt->execute() || !$stmt->bind_result($id)) {
echo "Statement Error: " , $stmt->error; // do not show this to public
} else {
while ($stmt->fetch()) {
echo "<div>$id</div>";
}
}
$stmt->close();
}