2014-12-03 3 views
1

Есть ли способ можно задать имена полей в PHP подготовленных операторов, вместо того, чтобы просто установив там значение, например,PHP имен PreparedStatements поле

$stmt = $mysqli->prepare("UPDATE movies SET filmName = ?, 
    filmDescription = ?, 
    filmImage = ?, 
    filmPrice = ?, 
    filmReview = ? 
    WHERE filmID = ?"); 
$stmt->bind_param('sssdii', 
    $_POST['filmName'], 
    $_POST['filmDescription'], 
    $_POST['filmImage'], 
    $_POST['filmPrice'], 
    $_POST['filmReview'], 
    $_POST['filmID']); 
$stmt->execute(); 
$stmt->close(); 

есть более простой способ сделать это? Например, есть ли способ сделать что-то вроде

так что он связывает все с правильными именами?

+1

Нестандартно, но вы можете легко написать свою собственную упаковку, чтобы сделать это ... конечно, что происходит с '$ _POST ['submit']'? –

+2

Да, есть более простой способ: использовать PDO, который принимает список значений для '-> execute ([...]);' – mario

+0

что такое sssdii? – gbvisconti

ответ

0

Надеюсь, это поможет. Я не тестировал, но если я что-то пропустил, прокомментируйте и я отредактирую.

$sql = "UPDATE 
      movies 
     SET 
      filmName = ?, 
      filmDescription = ?, 
      filmImage = ?, 
      filmPrice = ?, 
      filmReview = ? 
     WHERE 
      filmID = ?"; 

$arrayFields = array("filmName" => "s" 
        , "filmDescription" => "s" 
        , "filmImage" => "s" 
        , "filmPrice" => "d" 
        , "filmReview" => "i" 
        , "filmID" => "i"); 

$stmt = $mysqli->prepare($sql); 

foreach($_POST as $key=>$val) { 

    if(array_key_exists ($key , $arrayFields)) { 

     $stmt->bind_param($arrayFields[$key], $_POST[$key]); 
    } 
} 
$stmt->execute(); 

$stmt->close(); 
+0

не понравилось бы, если бы это было возможно, к сожалению, это не будет работать с mysqli – meda

+0

Что делать, если вместо '?' он использует: filmName, например? Возможно ли это в mysqli? Тогда просто использовать ключ $ внутри цикла, чтобы связать его – gbvisconti

+0

только PDO позволяет это, я изменил ваш код, чтобы показать, как это сделать в PDO – meda