Как поместить mysql внутри php-функции?

У меня проблема с размещением mysql в функции showMsg (). Mysql отлично работает, если он не завершен функцией showMsg (), но когда я обертываю его функцией showMsg (), он выдает сообщение об ошибке «Warning: mysql_query (): предоставленный аргумент недействителен». Как поместить mysql внутри php-функции? Ниже приведены мои коды:

<?php function showMsg(){ $query2 = "SELECT id, message, username, datetime FROM messageslive ORDER BY id DESC LIMIT 20"; $result2 = mysql_query($query2,$connection) or die (mysql_error()); confirm_query($result2); $num = mysql_num_rows($result2); while($msginfo = mysql_fetch_array($result2)){ echo $msginfo['message']; echo $msginfo['username']; } } <div> <?php showMsg(); ?> </div> ?> 

Вероятно, вам нужно:

 global $connection; 

(Внутри функции, то есть.)

См. Variable Scope

  1. Никогда не используйте global .
    Передайте $connection в свою функцию в качестве аргумента.

  2. Логика и представление должны быть разделены.
    Читайте о MVC: здесь или здесь .

  3. Глобальные переменные являются злыми, никогда не используют его. Если кто-то подскажет это – проигнорируйте все их ответы.

Как отмечалось выше, проблема связана с переменным охватом. Вместо добавления global $connection; вы могли бы рассмотреть более подход ООП и рассмотреть:

A: передача переменной $ connection в функцию.

B: размещение связанных функций в классе и передача DB-соединения в конструктор класса. например:

 class YourClass { private $connection; public function __construct($connection) { $this->connection = $connection; } public function showMsg(){ $query2 = "SELECT id, message, username, datetime FROM messageslive ORDER BY id DESC LIMIT 20"; $result2 = mysql_query($query2,$this->connection) or die (mysql_error()); confirm_query($result2); $num = mysql_num_rows($result2); while($msginfo = mysql_fetch_array($result2)){ echo $msginfo['message']; echo $msginfo['username']; } } } 

У меня недостаточно комментариев для комментариев. Но мне также нравится ответ OZ_ 🙂

$connection не имеет назначенного значения. Следующий код должен решить вашу проблему (добавьте его в начале функции):

 global $connection; 

Но вы должны знать о том, что использование глобальных переменных не является хорошей идеей, и вы можете:

  • (желательно) передать переменную $connection в параметре функции или
  • переместить объявление $connection извне функции только в функцию (если это не вызывает дополнительных проблем) или
  • redeclare $connection в функции (опять же: если это не вызовет дополнительных проблем),

Поскольку переменные являются локальными для функций. Вы должны добавить это в свою функцию:

 global $connection; 

Проще говоря, функции игнорируют внешние переменные из-за переменной области . Вы должны позволить объявлять переменную как находящуюся извне, используя global или вы можете отправить $connection через параметр.