Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

पीडीओ $_POST सरणी के माध्यम से लूप के साथ कथन सम्मिलित करें

जैसा कि अन्य ने कहा है, इस बात की संभावना बनी रहती है कि कोई दुर्भावनापूर्ण उपयोगकर्ता DOM में फ़ील्ड के नाम संपादित कर सकता है, लेकिन कहा कि निम्नलिखित में रुचि हो सकती है।

$sql='insert into `claims_motor` (`'.implode( '`,`', array_keys( $_POST ) ) .'`) values (:'.implode(',:',array_keys( $_POST ) ).');';
foreach( $_POST as $field => $value ) $params[":{$field}"]=$value;

$statement = $pdo->prepare( $sql );
$statement->execute( $params );

इनपुट डेटा से नकली html को हटाने के बारे में आपके प्रश्न के उत्तर में, आप निम्न की तर्ज पर कुछ कोशिश कर सकते हैं:

$options=array( 'flags'=>FILTER_FLAG_NO_ENCODE_QUOTES | FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_ENCODE_LOW | FILTER_FLAG_ENCODE_HIGH | FILTER_FLAG_ENCODE_AMP );

function filterfield( $field ){
    global $options;
    return ":".strip_tags( filter_var( $field, FILTER_SANITIZE_STRING, $options ) );
}
function filtervalue( $field ){
    global $options;
    return strip_tags( filter_input( INPUT_POST, $field,  FILTER_SANITIZE_STRING, $options ) );
}
function isfield( &$field, $key, $fields ){
    $field=in_array( $field, $fields ) ? $field : false;
}

$sql='insert into `claims_motor` (`'.implode( '`,`', array_keys( $_POST ) ) .'`) values (:'.implode(',:',array_keys( $_POST ) ).');';
foreach( $_POST as $field => $value ) $params[ filterfield( $field ) ]=filtervalue( $field );

मैं यह सुझाव नहीं दे रहा हूं कि यह एक सही समाधान है लेकिन यह कमोबेश आपके मूल प्रश्न का उत्तर देता है। आप यहां फ़िल्टर के बारे में अधिक जानकारी प्राप्त कर सकते हैं

मैंने पीडीओ का उपयोग करके एक शामिल DROP . के साथ यह कोशिश की मूल्य में बयान और वह ठीक था - स्ट्रिंग डेटा के रूप में डाला गया था। जब मैंने किसी फ़ील्ड नाम को संशोधित करने का प्रयास किया तो यह PDOException . का कारण बनता है और कुछ नहीं किया....

आपके सुझाव के अनुसार कॉलम नाम प्राप्त करने के लिए आप निम्न प्रयास कर सकते हैं:-

$sql="select group_concat(`column_name`) as 'cols' 
        from `information_schema`.`columns` 
        where `table_schema`=database() and `table_name`=:table;";

$params=array(':table' => 'claims_motor');
$statement = $pdo->prepare( $sql );
$statement->execute( $params );

/* Process the recordset */
$cols=$rs->cols; /* or whatever method to access the record */


/* Filter fields that were not in form - if any */
$cols=explode( ',', $cols );
array_walk( $cols, 'isfield', array_keys( $_POST ) );
$fields = array_filter( $cols );

/* Prepare sql for the insert statment */
$sql_insert='insert into `claims_motor` (`'.implode( '`,`', $fields ) .'`) values (:'.implode( ',:', $fields ).');';

/* reset params array */
$params=array();

/* Construct new array of bound variables / params */
foreach( $_POST as $field => $value ) $params[ filterfield( $field ) ]=filtervalue( $field );

/* add the data to db */
$statement = $pdo->prepare( $sql );
$statement->execute( $params );



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP फॉर्म फाइल अपलोड नहीं कर रहा है

  2. लोचदार खोज पूर्ण पाठ बनाम mysql पूर्ण पाठ?

  3. PHP/MySQL त्रुटि ईमेल पता पूछताछ

  4. MySQL काउंटर जैसे एकाधिक उपयोगकर्ताओं द्वारा एक ही पंक्ति को अपडेट कर रहा है

  5. PHP से mySQL में संग्रहित प्रक्रियाओं को कैसे सम्मिलित/बनाना है?