У меня проблема с размещением 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
Никогда не используйте global
.
Передайте $connection
в свою функцию в качестве аргумента.
Логика и представление должны быть разделены.
Читайте о MVC: здесь или здесь .
Глобальные переменные являются злыми, никогда не используют его. Если кто-то подскажет это – проигнорируйте все их ответы.
Как отмечалось выше, проблема связана с переменным охватом. Вместо добавления 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
извне функции только в функцию (если это не вызывает дополнительных проблем) или $connection
в функции (опять же: если это не вызовет дополнительных проблем), Поскольку переменные являются локальными для функций. Вы должны добавить это в свою функцию:
global $connection;
Проще говоря, функции игнорируют внешние переменные из-за переменной области . Вы должны позволить объявлять переменную как находящуюся извне, используя global
или вы можете отправить $connection
через параметр.