mysqli_num_rows равен 1, но mysql_fetch_assoc возвращает ноль

У меня возникла небольшая проблема с подключением mysqli, похоже, с первого раза. Прежде чем идти дальше, я проверил соединение и оно работает, запрос правильный, но значения var_dump в mysql_fetch_assoc и mysql_fetch_array равны нулю.

Код проверяет, существует ли строка со значением, останавливается ли она, а если нет, то извлекает значение из БД. Похоже, что это работает нормально, вплоть до того, как потянуть значение.

Вот код:

    db = new database('localhost', 'username', 'password', 'my_db');

$db->query("SELECT * FROM `codes` WHERE `code` = '$ccode'");

if ($db->numRows() == 0)
{
echo "No value was found";

}
else
{
foreach($db->rows() as $email)
{
echo $email['um-email'];
echo $ccode;
}

}$db->disconnect();
}

Вот код для страницы класса соединения:

class database
{
protected $_link, $_result, $_numRows, $_content;
public function __construct($server, $username, $password, $db)
{
$this->_link = mysqli_connect($server, $username, $password, $db);
mysqli_select_db($this->_link, $db);
}

public function disconnect()
{
mysqli_close($this->_link);
}

public function query($sql)
{
$this->_result = mysqli_query($this->_link, $sql);

echo $sql;

$this->_numRows = mysqli_num_rows($this->_result);
}

public function content()
{
return $this->_content;
}public function display_content()
{
$arows = array();
for($x = 0; $x < $this->numRows(); $x++)
{
$arows[] = mysqli_fetch_array($this->_result);
}
echo var_dump($arows);
return $arows;
}

public function numRows()
{
return $this->_numRows;
}

public function rows()
{
$rows = array();
for($x = 0; $x < $this->numRows(); $x++)
{
$rows[] = mysqli_fetch_assoc($this->_result);
}
echo var_dump($rows);
return $rows;
}
}

В реальной потере относительно того, что вызывает проблему, тот факт, что БД имеет значение там и возвращает количество строк, я не понимаю, почему массивы равны нулю.

Если примеры кода выше, я пытаюсь получить адрес электронной почты из первого сегмента кода с этим:

foreach($db->display_content() as $aemail)
{
echo $aemail['um-email'];
}

В конечном итоге это будет назначено переменной сеанса на более позднее время, пока я использую echo, чтобы увидеть, имеет ли она значение. На данный момент есть биты, которые можно защитить от внедрения SQL, но я бы хотел, чтобы это работало, прежде чем добавлять проверку.

Точное сообщение, возвращаемое из var_dump:

array (size=1)
0 =>
array (size=3)
'ID' => string '3' (length=1)
'code' => string '12345' (length=5)
'um_email' => string '[email protected]' (length=20)

Для TL; DR количество строк равно 1, когда есть правильное значение, mysqli_fetch_array / assoc возвращает ноль.

Большое спасибо, я ценю всю помощь

ОБНОВЛЕНИЕ: Удалена строка, как это было предложено Марком Бейкером, и теперь кажется, что данные теперь хранятся в массиве (глядя на var_dump), однако сейчас я получаю значение «Неопределенное смещение: 0».

0

Решение

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]