php
  • pdo
  • 2012-06-18 2 views 1 likes 
    1

    Здесь мы идем. Я все еще довольно новичок в PHP, и я пытаюсь изучить PDO. Я пытаюсь понять, почемуУстранение неполадок PHP PDO Подготовить инструкцию привязки

    $validStartYear=-1; 
    echo $listString; //$listString = 'WHERE a regexp "Nissan"' 
    $queryToPrep='SELECT a FROM b WHERE a regexp "Nissan" ORDER BY start_year asc LIMIT 1;'; 
    $query = $newMysql->prepare($queryToPrep); 
    $query->execute(); 
    echo '<br/><br/>'; 
    print_r($query); 
    echo '<br/>'; 
    $row=$query->fetch(); 
    echo $row[0],'<br/>'; 
    

    выходы

    a regexp "Nissan" 
    
    PDOStatement Object ([queryString] => SELECT a FROM b WHERE a regexp "Nissan" ORDER BY start_year asc LIMIT 1;) 
    1971 
    

    в то время как

    $prepAgain='SELECT a FROM b WHERE ? ORDER BY a asc LIMIT 1;'; 
    $query2= $newMysql->prepare($prepAgain); 
    $query2->bindParam(1, $listString, PDO::PARAM_STR); 
    $query2->execute(); 
    echo '<br/>'; 
    print_r($query2); 
    echo '<br/>'; 
    $row2=$query2->fetch(); 
    echo $row2[0]; 
    

    выходы

    PDOStatement Object ([queryString] => SELECT start_year FROM engine_kits WHERE ? ORDER BY start_year asc LIMIT 1;) 
    

    значение не возвращается. Я получаю пустой массив, независимо от того, насколько сильно я ухожу. Синтаксис кажется правильным, но я что-то упускаю?

    +3

    Вы не можете заменить любую произвольную составляющую SQL строки с ''? Заполнителей. Я не уверен, поддерживает ли PDO заполнители для REGEXP, но если это так, это должно быть что-то вроде 'WHERE regexp?' –

    +0

    Итак, каково значение $ listString? –

    +0

    Зачем вам «REGEXP» здесь? – zerkms

    ответ

    2

    Вы можете привязывать фактические значения только через PDO. Ваш первый блок кода работает, потому что ничего не связано неправильно. Кроме того, вы обычно захотите использовать bindValue() вместо bindParam().

    Try что-то вроде этого

    $car = 'Nissan' 
    $sql = 'SELECT a FROM b WHERE a regexp ? ORDER BY a asc LIMIT 1'; 
    $stmnt = $newMysql->prepare($sql); 
    $stmnt->bindValue(1, $car, PDO::PARAM_STR); 
    

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

    • Нет связанных вопросов^_^