За последние 24 часа нас посетили 18846 программистов и 1630 роботов. Сейчас ищут 947 программистов ...

Проблема с запросом...

Тема в разделе "PHP для новичков", создана пользователем ainur777, 21 мар 2014.

  1. ainur777

    ainur777 Активный пользователь

    С нами с:
    24 май 2013
    Сообщения:
    93
    Симпатии:
    0
    Вот собственно запрос к бд:
    include ("base.php");
    preparedStatement = $db->prepare('SELECT * FROM users WHERE id = :id');
    $preparedStatement->execute(array(':id' => $id));
    $row = $preparedStatement->fetchAll();

    echo "$row[name]";

    Выводит ошибку в первой же строке...
     
  2. immortal.1986

    immortal.1986 Активный пользователь

    С нами с:
    24 сен 2013
    Сообщения:
    257
    Симпатии:
    0
    $db->prepare('SELECT * FROM users WHERE name=:name');
    $db->execute(array(':name'=>john,));
    $result = $db->fetchAll();


    $stmt = $db->prepare(“SELECT * FROM users WHERE id=?”);
    $stmt->execute(array($_GET[‘id’]));
    $stmt->fetch(PDO::FETCH_ASSOC);
     
  3. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Без : напиши array('id' => $id)
     
  4. ainur777

    ainur777 Активный пользователь

    С нами с:
    24 май 2013
    Сообщения:
    93
    Симпатии:
    0
    Все равно выдает ошибку:
    Fatal error: Call to a member function prepare() on a non-object in Z:\home\wwe.com\www\page.php on line 4

    Я хочу сделать безопасный запрос от sql инъекции, может можно по другому???
     
  5. pircul

    pircul Активный пользователь

    С нами с:
    14 янв 2014
    Сообщения:
    100
    Симпатии:
    0
    Дело не в двоеточии. Запись с двоеточием является корректной. Просто PHP говорит, что вы пытаетесь вызвать метод prepare у переменной которая не является объектом.

    У вас неверно установлено соединение
     
  6. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
  7. ainur777

    ainur777 Активный пользователь

    С нами с:
    24 май 2013
    Сообщения:
    93
    Симпатии:
    0
    А как правильно установить соединение? у меня так:
    $db = mysql_connect ("localhost","root","");
    mysql_select_db ("baza",$db);
     
  8. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    я тебе привел ссылку
     
  9. ainur777

    ainur777 Активный пользователь

    С нами с:
    24 май 2013
    Сообщения:
    93
    Симпатии:
    0
    C PDO ниразу пока не работал, как правильнее подключиться...
    try {
    $dbh = new PDO('mysql:host=localhost;dbname=baza', $login, $password);
    foreach($dbh->query('SELECT * from users') as $myrow) {
    print_r($myrow);
    }
    $dbh = null;
    } catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
    }

    так не получилось....
     
  10. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    ainur777, то есть установив соединение процедурно еще и с устаревшим расширением mysql, вы пытаетесь обратиться к объекту в котором вообще его нет? Где логика?
     
  11. immortal.1986

    immortal.1986 Активный пользователь

    С нами с:
    24 сен 2013
    Сообщения:
    257
    Симпатии:
    0
    Код (PHP):
    1. $dbh = new PDO('mysql:host=localhost;dbname=baza', $login, $password);
    2.    $myrow = $dbh->query('SELECT * from users');
    3. //$res = $myrow->fetchALL(); 
    4.  $res = $myrow->fetchALL(PDO::FETCH_ASSOC);  
    5. echo '<pre>';
    6. print_r( $res);
    7. echo '</pre>';
    8.  
     
  12. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Автор, а у тебя в скрипте много таких запросов? Может быть проще переписать под подключение с помощью mysql_connect? =)
     
  13. ainur777

    ainur777 Активный пользователь

    С нами с:
    24 май 2013
    Сообщения:
    93
    Симпатии:
    0
    Код (PHP):
    1. $dbh = new PDO('mysql:host=localhost;dbname=baza', $login, $password);
    2.    $myrow = $dbh->query('SELECT * from users');
    3. //$res = $myrow->fetchALL(); 
    4.  $res = $myrow->fetchALL(PDO::FETCH_ASSOC);  
    5. echo '<pre>';
    6. print_r( $res);
    7. echo '</pre>';
    8.   
    [/quote]

    Ошибка Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[28000] [1045] Access denied for user 'mylogin'@'localhost' (using password: YES)' in Z:\home\wwe.com\www\office.php:26 Stack trace: #0 Z:\home\wwe.com\www\office.php(26): PDO->__construct('mysql:host=loca...', 'mylogin', 'e329d6dbebb94cd...') #1 {main} thrown in Z:\home\wwe.com\www\office.php on line 26
     
  14. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    И в чем вопрос? Как думаешь что означает
     
  15. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    root а не mylogin надо.
    Но может все же права проще на mysql?
     
  16. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    [vs], ты чего такое советуешь. автор, никогда не логинься рутом! права надо выставлять правильные на нужного пользователя, только и всего.
    возможно ты указал имя базы, которой вообще не существует.

    когда тупо копируешь не вникая, так и получается — косяк на косяке. читай документацию про каждую используемую функцию!!!
     
  17. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    это не совет, а работающий вариант. ТС же пишет:
    кстати про функции mysql_. С драйвером mysqlnd эти функции работают эффективно. Поэтому автор, если у тебя PHP >5.3, париться с pdo совсем не обязательно.