Задать вопрос

Почему не работает функция php?

Здравствуйте, подскажите почему данная функция не работает?

$mysqli = new mysqli($db_host, $db_user, $db_password, $db_name);

function SendNotice($p1, $p2) {
    global $mysqli;
    $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT `id` FROM `users` WHERE `login` = '$p1'"));
    if (!$row['id']) echo 'Ошибка!';
    mysqli_query($mysqli, "INSERT INTO `notifications` VALUES ('', $row[id], 0, NOW(), '$p2')");
}

Никакие ошибки не появляются.
  • Вопрос задан
  • 767 просмотров
Подписаться 4 Простой Комментировать
Решения вопроса 1
@deepprod Автор вопроса
Данный вопрос решил с помощью redbeanphp. Спасибо за ответы. Код прилагаю ниже.

function SendNotice($p1, $p2) {
            
		$user = R::findOne('users', 'login = ?', array($p1));
		if ($user) {
			
		$id = $user->id;
			
		$notice = R::dispense('notices');
		$notice->uid = $id;
		$notice->status = 0;
		$notice->data = date("H:i d:m:Y");
		$notice->text = $p2;
		R::store($notice);	
			
		} else {
			
		echo 'Ошибка при добавлении оповещения!';
			
		}
		
    }
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Ни каких ошибок не появляется.
Это не говорит о том что их нет. Для отладки на дев окружении должны быть включены выводы всех нотисов и варнингов, либо через конфиг php.ini, либо в коде при старте указать
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
Этот вопрос надо задавать не в Спортлото, а своей базе данных.
Только она знает, почему запрос не выполняется.

Для этого надо правильно соединяться с mysqli.
Не одной строчкой, а указывая все нужные параметры. В частности режим отображения ошибок:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
И тогда БД сможет тебе наконец сказать, что ей не так.

Если взять код mysqli.php по ссылке выше, то правильный, безопасный, и сообшающий о своих ошибках код будет таким
function SendNotice($conn, $p1, $p2) {
    $sql = "SELECT `id` FROM `users` WHERE `login` = ?";
    $row = prepared_query($mysqli, $sql, [$p1])->get_result()->fetch_assoc();
    if (!$row['id']) echo 'Ошибка!';
    $sql = "INSERT INTO `notifications` VALUES (null, ?, 0, NOW(), ?)";
    prepared_query($conn, $sql, [$row[id], $p2]);
}

И вызываться она должна так
include 'mysqli.php';
SendNotice($conn, 'test', 'Test text');
Ответ написан
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
почитай про области видимости переменных
Ответ написан
Комментировать
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Рекомендую сделать так:
if (empty($row['id'])) echo ('Ошибка!');
else mysqli_query($mysqli, "INSERT INTO `notifications` VALUES ('', '".mysqli_real_escape_string($mysqli, $row['id'])."', 0, NOW(), '".mysqli_real_escape_string($mysqli, $p2)."')");
Ответ написан
irishmann
@irishmann
Научись пользоваться дебаггером
А ничего то что переменные у тебя как обычный текст определились из-за кавычек?
function SendNotice($p1, $p2) {
        global $mysqli;
        $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT `id` FROM `users` WHERE `login` = '".$p1."'"));
        if (!$row['id']) echo 'Ошибка!';
        mysqli_query($mysqli, "INSERT INTO `notifications` VALUES ('', ".$row[id].", 0, NOW(), '".$p2."')");
    }


P.S.: Настоятельно советую так запросы не делать. Используйте подготовленные запросы.
Ответ написан
Ваш ответ на вопрос

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

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