2014-01-13 3 views
0

вот что я хочу, но не могу заставить его работать с новым MySQLi только потому, что мой хозяин не все новые PHP и т.д. ...MySQLi MySQLi fech массив замена ассоциативный NO работает

Но должна быть какая-то решение или все, что может сделать MYSQLI?

Пожалуйста, не говорите о PDO, потому что даже уродливое имя звучит как PEDO, и меня интересует только MySQLI и решение для этой простой вещи. Не изменяйте структуру моего скрипта. Вопрос только, если есть что-то, чтобы заставить его работать с MySQL, или если я, возможно, вернуться к процедуре MySQL вместо заявлений

<?php 
    $sql = new mysqli('localhost','user','pass','db'); 
    $who = $_GET['user']; 
    $query = $sql->prepare("SELECT * FROM profiles WHERE user=?"); 
    $query->bind_param("s",$who); 
    $result = $query->execute(); 
    while($row = $result->fetch_array(MYSQLI_ASSOC)) // << HERE IS THE PROBLEM // 

// I GET ERROR Fatal error: Call to a member function fetch_array() on a non-object in ... // 

«», но должен быть какой-то способ, чтобы заставить его работать, как мы делаем с в то время как ($ строка = mysqli_fetch_array ($ SQL)) //

{ 
    ?> 


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>title</title> 
    </head> 

    <body> 
    CUSTOM HTML FOR A NICE DESIGN I WANT TO KEEP THE SAME DESIGN LAYOUT ETC... 

     HELLO <?php echo "$row[USERNAME]"; ?> 
     YOUR INFO IS <?php echo "$row[JUST_SOME_INFO]"; ?> 


    </body> 
    </html> 
    <?php 
    } 
    ?> 
+0

'Dont говорить о ПДО, потому что даже уродливое название звучит как PEDO' вы выиграть interwebz – Mark

+0

хахаха действительно имя не звучит хорошо – Firefighter

ответ

0

Комментарий эта строка:

$result = $query->get_result(); 

вам не нужно.

+0

Привет. Отредактировано, и теперь я получаю следующую ошибку. Неустранимая ошибка: вызовите функцию-член fetch_array() для не-объекта в – Firefighter

+0

Сначала проверьте свой '$ result'. Я думаю, у вас есть пустое значение (NULL) в результате вашего запроса. Может быть, у вас нет записи с этим '$ who' в вашей БД. – BaBL86

0

Попробуйте этот.

<?php 
$sql = new mysqli('localhost', 'user', 'pass', 'db'); 
$who = $_GET['user']; 
$query = $sql->prepare("SELECT * FROM profiles WHERE user=?"); 
$query->bind_param("s", $who); 
$result = $query->execute() or die($query->error); 
while ($row = $result->fetch_array()) { 
    $username = $row[USERNAME]; 
    $info = $row[JUST_SOME_INFO]; 
} 
?> 


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>title</title> 
</head> 

<body> 
    CUSTOM HTML FOR A NICE DESIGN I WANT TO KEEP THE SAME DESIGN LAYOUT ETC... 

    HELLO <?php echo $username; ?> 
    YOUR INFO IS <?php echo $info; ?> 


</body> 
</html> 
+0

отредактировал его по своему пути и фатальной ошибке: вызов функции-члена fetch_array() для не-объекта в – Firefighter

+0

Я думаю, вы должны инициализировать другую переменную, которая хранит данные из базы данных. while ($ row = $ result-> fetch_array()) { $ username = $ row ['USERNAME']; $ info = $ row ['JUST_SOME_INFO']; } – kazupooot

0

Это то, что происходит, когда вы начинаете копировать и вставлять php вместе, не зная, что это значит.

решения здесь:

создать класс для $sql или объявить $ SQL глобального imediately после вызова переменных.

попробовать

global $sql;

, но если вы на самом деле хотите, чтобы решить эту проблему (сделав свой $sql переменной является объектом)

попробовать

$sql = array(); 
$sql['host'] = 'host'; 
$sql['user'] = 'user'; 
$sql['pass'] = 'password'; 
$sql['db'] = 'database'; 
global $sql; 
$db = new mysqli($sql); 

Теперь, когда вы хотите сделать что-то с соединением db.

$db->action(); 

Это только основы и, вероятно, не сработают. вы, вероятно, должны вместо этого читать больше на php/mysqli, прежде чем пытаться писать свои собственные классы.

+0

Нет ничего плохого в процедурном коде вообще. я использую его для большинства вещей. – r3wt

1

Вот ваше решение

Вы не должны использовать fetch_array() но использовать fetch()

также вам придется связать результат, используя bind_result перед тем fetch

$query->execute(); 

$query->bind_result($col1); 

while($row = $query->fetch()){ 
    printf("%s \n", $col1); 
} 

Вы можете использовать $col1 напрямую также не нужно использовать его с printf()

Мой рабочий пример по моей БД приведен ниже, если вы хотите получить больше помощи,

$sql = new mysqli('localhost','user','pass','dbname'); 

$who = 'php'; 

$query = $sql->prepare("SELECT * FROM job WHERE skill=?"); 

$query->bind_param("s",$who); 


$query->execute(); 

$query->bind_result($col1); 

while($row = $query->fetch()){ 
    printf("%s \n", $col1); 
} 
+0

был почти рабочий или другой результат. Предупреждение: mysqli_stmt :: bind_result() [mysqli-stmt.bind-result]: Число переменных привязки не соответствует количеству полей в подготовленном операторе в – Firefighter

+0

, по крайней мере, я получил новое сообщение об ошибке – Firefighter

+0

используйте $ query-> bind_result ($ col1, $ col2, $ col3, ...), так что если ваша таблица имеет 3 строки, используйте 3 varibles в bind_result. –

Смежные вопросы