slusarvitaliy
@slusarvitaliy
Системный администратор

Как разместить запрос к базе данных Mysql внутри функции на PHP?

хочу выполнять запрос внутри функции и выводить результат, как правильно это оформить ?
допустим уже есть подключение к базе и я хочу, чтобы производился запрос к той или иной базе:

так выдает ошибку

<?php
	$con = mysqli_connect("localhost","root","","mybd");
	mysqli_set_charset($con,"utf8");

	if (!$con) {
	    die("Connection failed: " . mysqli_connect_error());
	}

function selected($db_name){
	$query = "select * from $db_name";
	$result = mysqli_query($con, $query);
	$row = mysqli_fetch_array($result);
	do
	{
		echo $row['name']."<br>";
	}while($row = mysqli_fetch_array($result));
}

selected('users');


а так все работает

$query = "select * from users";
	$result = mysqli_query($con, $query);
	$row = mysqli_fetch_array($result);
	do
	{
		echo $row['name']."<br>";
	}while($row = mysqli_fetch_array($result));


ошибка
Warning: mysqli_query() expects parameter 1 to be mysqli, null given


Можно ли вообще помещать запросы в функцию и как это делать правильно?
Заранее благодарю.
  • Вопрос задан
  • 2185 просмотров
Решения вопроса 1
elevenelven
@elevenelven
Php Dev @ Amadeus
В вашей функции
$result = mysqli_query($con, $query);

$con - переменная которая не попадает в scope. Функции она не известна.

Попробуйте
function selected($db_name){
  global $con;
...
}


А в целом, должен заметить что так уже давно никто не пишет. Оберните $con хотя бы в синглтон. Чтобы быть уверенным что никто эту переменную не перепишет в коде рантайм.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
MaxDukov
@MaxDukov
впишусь в проект как SRE/DevOps.
$result = mysqli_query($con, $query); - в функции используются локальные переменные. $con у вас появляется ДО вызова функции.
а так - без проблем
Ответ написан
Комментировать
Winsik
@Winsik
сис.админ, недопрограммист :)
ваши переменные внутри функции не видны
function selected($con,$db_name){
Ну и соответственно: selected($con,'users');
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы