Сообщение об ошибке: mysql_fetch_array() ожидает, что параметр 1 будет ресурсом, null

Я прочитал предыдущие вопросы с похожими названиями, ни один из них не дает мне ответа на эту конкретную ситуацию. Я получаю упомянутую выше ошибку с конкретной функциональностью. Я не уверен, что заставляет его всплывать. Это моя первая разработка, поэтому, если она не является специфичной для решения проблемы, оставьте без внимания тот факт, что я должен использовать PDO или mysqli.

это функция, которую я пытаюсь создать. когда команда sql выполняется изолированно, она возвращает правильные результаты.

public function search_for_candidates_by_technology($technology, $seniority){
 $technology = $this->real_escape_string($technology);
 $seniority = $this->real_escape_string($seniority);
 $this->query("SELECT * FROM candidates WHERE technology LIKE ". $technology ." AND seniority LIKE ". $seniority ."");

}

Класс, к которому принадлежит функция, - tecnoDB. На фактической странице, где я пытаюсь создать экземпляр, это код:

<form name="buscarBase" action="buscarCV.php" method="POST">Que technologia:
 Que seniority:
 
 
 </form>
 search_for_candidates_by_technology($_POST['usertech'], $_POST['userSeniority']);
 while($searchResult = mysql_fetch_array($search)){
 echo "";
 echo "";
 }
 ?>
 <table border="black">
 <tbody><tr><th>Technology</th><th>Seniority</th></tr>
 <!--?php
 $search = tecnoDB::getInstance()---><tr><td>" . htmlentities($searchResult['technology']) ."</td><td>". htmlentities($searchResult['seniority']) . "</td></tr></tbody></table>

Ошибка идет по строке: while ($ searchResult = mysql_fetch_array ($ search)).... Это заставляет меня думать, что проблема в том, что $ search не создается как экземпляр. Есть идеи?

Это мой первый проект и первый вопрос, пожалуйста, будьте осторожны.

1 ответ

<!--?php
 session_start();
if (!array_key_exists("user", $_SESSION)) {
 header('Location: index.php');
 exit;
}
require_once("Includes/tecnoDB.php");
 $company_id = tecnoDB::getInstance()--->get_company_id_by_name($_SESSION['user']);

if ($_SERVER['REQUEST_METHOD'] == "POST"){
 if (array_key_exists("back", $_POST)) {
 header('Location: companyControlPanel.php' ); 
 exit;
 } 
else{
$service_user = tecnoDB::getInstance()->verify_service_status($company_id); 
 $access = $service_user->fetch_row(); 
 if (array_key_exists ("buscar", $_POST)){
 if($access[0] < 2 ){
 header("Location: selectServicePackage.php" ); 
 exit;
 }
 }

}
}

 // put your code here ?>
 <form name="buscarBase" action="buscarCV.php" method="POST">Que tecnologia:
 Que seniority:
 
 
 </form>
 search_for_candidates_by_technology($_POST['usertech'], $_POST['userSeniority']);
 while($searchResult = mysql_fetch_array($search)){
 echo "";
 echo "";
 }
 ?>
 <table border="black">
 <tbody><tr><th>Technology</th><th>Seniority</th></tr>
 <!--?php
 $search = tecnoDB::getInstance()---><tr><td>" . htmlentities($searchResult['technology']) ."</td><td>". htmlentities($searchResult['seniority']) . "</td></tr></tbody></table>
 




here goes the tecnoDB class:

 class tecnoDB extends mysqli {


 // single instance of self shared among all instances
 private static $instance = null;


 // db connection config vars
 private $user = "phpuser";
 private $pass = "phpuserpw";
 private $dbName = "tecnosearch";
 private $dbHost = "localhost";

 //This method must be static, and must return an instance of the object if the object
 //does not already exist.
 public static function getInstance() {
 if (!self::$instance instanceof self) {
 self::$instance = new self;
 }
 return self::$instance;
 }

 // The clone and ****** methods prevents external instantiation of copies of the Singleton class,
 // thus eliminating the possibility of duplicate objects.
 public function __clone() {
 trigger_error('Clone is not allowed.', E_USER_ERROR);
 }
 public function __******() {
 trigger_error('Deserializing is not allowed.', E_USER_ERROR);
 }

 // private constructor
 private function __construct() {
 parent::__construct($this->dbHost, $this->user, $this->pass, $this->dbName);
 if (mysqli_connect_error()) {
 exit('Connect Error (' . mysqli_connect_errno() . ') '
 . mysqli_connect_error());
 }
 parent::set_charset('utf-8');
}

public function get_company_id_by_name($name) {

 $name = $this->real_escape_string($name);

 $company = $this->query("SELECT id FROM company WHERE name = '"

 . $name . "'");
 if ($company->num_rows > 0){
 $row = $company->fetch_row();
 return $row[0];
 } else
 return null;
}

public function get_searches_by_company_id($company_id) {
 return $this->query("SELECT id, description, technology FROM searches WHERE company_id=" . $company_id);
}

public function create_company ($name, $password){
 $name = $this->real_escape_string($name);
 $password = $this->real_escape_string($password);
 $this->query("INSERT INTO company (name, password) VALUES ('" . $name . "', '" . $password . "')");
}

public function verify_company_credentials ($name, $password){
 $name = $this->real_escape_string($name);

 $password = $this->real_escape_string($password);
 $result = $this->query("SELECT 1 FROM company
 WHERE name = '" . $name . "' AND password = '" . $password . "'");
 return $result->data_seek(0); 
}

public function verify_service_status ($company_id){
 $company_id = $this->real_escape_string($company_id);
 $service = $this->query("SELECT service FROM company WHERE id = '". $company_id ."'");
 return $service; 
}

function insert_search($company_id, $description, $technology){
 $description = $this->real_escape_string($description);
 $technology = $this->real_escape_string($technology);
 $this->query("INSERT INTO searches (company_id, description, technology)" . 
 " VALUES (" . $company_id . ", '" . $description . "','" .$technology. "')");
}

public function search_for_candidates_by_technology($technology, $seniority){
 $technology = $this->real_escape_string($technology);
 $seniority = $this->real_escape_string($seniority);
 $this->query("SELECT * FROM candidates WHERE technology LIKE ". $technology ." AND seniority LIKE ". $seniority ."");
}
}
?>

Я исправил ошибку, установив запрос в переменной search_for_candidates_by_technology = $ и вернув переменную, а также на фактическую страницу, требующую файла, где указанная функция. Я установил экземпляр search_for_candidates_by_technology, равный $ variable1, и создал другой объект в результате $variable1-> get_array; , Мои сообщения об ошибках исчезли, но результаты не отображаются в результатах поиска. Я предполагаю, потому что действие находится на одной странице, и оно вызывает перезагрузку страницы, и когда оно перезагружается, по существу происходит сброс. Я рассматриваю использование AJAX, чтобы показывать результаты, но я никогда не использовал асинхронный javascript и только кратко видел XML. Любые указатели или идеи, которые не потребуют AJAX?

licensed under cc by-sa 3.0 with attribution.