2013-04-11 3 views
1

Я новичок в mysqli, я написал функцию, как показано ниже.mysqli и получение данных

1 - я не мог найти способ для SELECT * запроса и имеющие bind_result присвоить значение каждого столбца в одной и то же переменное имени. (Например, name значения столбца из #row магазинов $name)

Я считаю bind_result() не имеет функций на SELECT * запросе?

2 - Итак, я попробовал другой вариант, чтобы получить все строки и назначить их соответствующей переменной вручную через цикл. Я думаю, что я должен использовать $query->fetch_all() или $query->fetch_assoc() для зацикливания, но я сталкиваюсь с этим:

Fatal error: Call to undefined method mysqli_result::fetch_all()

или

Fatal error: Call to undefined method mysqli_result::fetch_assoc()

Однако я сделал phpinfo() и увидел mysqlnd был включен и PHP версии 5.4 .7 (запуск XAMPP v1.8.1)

И 3- что, наконец, я было ниже идеи, которая тоже не работает.

function the_names($name) 
{ 
    global $db; 
    if($query = $db->prepare("SELECT * FROM users where name=?")) 
    { 
     $query->bind_param('s', $name); 
     if($query->execute()) 
     { 
      $query->store_result(); 
      if($query->num_rows > 1) 
      { 
       while($row = $query->fetch()) 
       { 
        echo $row['name']; // Here is the problem 
       } 
      } 
      else 
       echo "not valid"; 
      $query->close(); 
     } 
    } 
} 

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

ответ

1

Одно слова, чтобы ответить на все ваши вопросы сразу - PDO
Он имеет все, что вы пытаетесь получить от MySQLi (напрасно):

function the_names($name) 
{ 
    global $db; 
    $query = $db->prepare("SELECT * FROM users where name=?"); 
    $query->execute(array($name)); 
    return $query->fetchAll(); 
} 

$names = the_names('Joe'); 
foreach ($names as $row) { 
    echo $row['name']; 
} 

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

+1

Для чего нужен mysqli! – revo

+0

О, да, намерения были хороши. Но реализация стала кошмаром. Поэтому вы можете сказать, с какими проблемами вы сталкиваетесь. –

+0

Отличный ответ, я делаю переключатель! @revo Хорошая практика принять ответ (с этой галочкой), если он ответил на ваш вопрос – michaellindahl

0

Если код MySQLi не binding_param() вы можете просто написать код, как показано ниже:

$mysqli = new mysqli("localhost" , "root" , "" , "database_name"); 
$result = $mysqli->query("SELECT * FROM users where name=" . $name) ; 
while ($row = $result->fetch_assoc()) { 
    echo $row["name"]; 
} 

Если вы используете binding_param() код, необходимо также установить bind_result()

$db = new mysqli("localhost" , "root" , "" , "database_name"); 
function the_names($name){ 
    global $db; 


    /* Prepared statement, stage 1: prepare */ 
    if (!($query = $db->prepare("SELECT * FROM users where name=?"))) { # prepare sql 
    echo "Prepare failed: (" . $db->errno . ") " . $db->error; 
    } 


    /* Prepared statement, stage 2: bind and execute */ 
    if (!$query->bind_param("s", $name)) { # giving param to "?" in prepare sql 
     echo "Binding parameters failed: (" . $query->errno . ") " . $query->error; 
    } 

    if (!$query->execute()) { 
     echo "Execute failed: (" . $query->errno . ") " . $query->error; 
    } 


    $query->store_result(); # store result so we can count it below... 
    if($query->num_rows > 0){ # if data more than 0 [ that also mean "if not empty" ] 

     # Declare the output field of database 
     $out_id = NULL; 
     $out_name = NULL; 
     $out_age = NULL; 
     if (!$query->bind_result($out_id, $out_name , $out_age)) { 
      /* 
      * Blind result should same with your database table ! 
      * Example : my database 
      * -users 
      * id ( 11  int) 
      * name (255 string) 
      * age ( 11  int) 
      * then the blind_result() code is : bind_result($out_id, $out_name , $out_age) 
      */ 
      echo "Binding output parameters failed: (" . $query->errno . ") " . $query->error; 
     } 

     while ($query->fetch()) { 
      # print the out field 
      printf("id = %s <br /> name = %s <br /> age = %s <br />", $out_id, $out_name , $out_age); 
     } 

    }else{ 
     echo "not valid"; 
    } 

} 
the_names("panji asmara"); 

Ссылка:

http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

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