У меня возникла небольшая проблема с подключением 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».
Немного старого вопроса и был решен, я перепроектировал форму и соединения с базой данных, оказалось, что после обработки этой формы мне нужно было использовать положение массива вместо имени поля.
Других решений пока нет …