30

Вопрос по arrays, mysql, php – Вставить массив в базу данных MySQL с помощью PHP

У меня есть следующий массив, который я хочу сохранить в моей базе данных ...

$insData = array(
    'uid' => $fbme['id'],
    'first_name' => $fbme['first_name'],
    'last_name' => $fbme['last_name'],
    'email' => isset($fbme['email']) ? $fbme['email'] : '',
    'link' => $fbme['link'],
    'affiliations' => $networks,
    'birthday' => $info[0]['birthday_date'],
    'current_location' => isset($fbme['location']['name']) ? $fbme['location']['name'] : '',
    'education_history' => $education,
    'work' => $workInfo,
    'hometown_location' => isset($fbme['hometown']['name']) ? $fbme['hometown']['name'] : '',
    'interests' => $info[0]['interests'],
    'locale' => $info[0]['locale'],
    'movies' => $movies,
    'music' => $music,
    'political' => $info[0]['political'],
    'relationship_status' => $info[0]['relationship_status'],
    'sex' =>  isset($fbme['gender']) ? $fbme['gender'] : '',
    'tv' => $television,
    'status' => '0',
    'created' => $now,
    'updated' => $now,
);

Я пытался найти в Google информацию о том, как это сделать, и все, что я могу найти, - это информация о том, что мой массив должен быть разделен перед вставкой в таблицу. Это правильно? Извините за наивность, очень новый для php.

  • Это может быть полезно. Но вы не должны использовать его, когда вы что-то разрабатываете. Вы должны использовать это, когда у вас есть проблемы с производительностью, и тест показывает положительный результат. Не раньше этого. Его преждевременная оптимизация.

    от
  • @ Unkn0wn0x Вы явно не понимаете код. rlemon использует готовые заявления. Сначала он добавляет: к каждому ключу в$prep, Это делает ключи действительным заполнителем в подготовленных утверждениях. Во-вторых, он добавляет их сarray_keys($prep) и использует их с$sth->execute($prep) заявление.

    от
  • @rlemon Ваш код не будет выполнять ожидаемую работу, пока Вы не изменитеarray_keys($prep) внутриVALUES вarray_values($prep), Используя текущий код, вы также напишите ключи в виде значений.

    от
  • Просто для тех, кто может посмотреть на этот код. Мне потребовалась пара попыток, прежде чем я понял, что у вас есть дополнительные> сразу после$prep[':'.$k] =, Если вы удалите знак больше, чем ваш, ваш код работает.

    от
  • я не понимаю, почему вы добавляете `:` перед ключом?

    от
  • @ Майкл, хороший улов. обновлено.

    от
  • на первый взгляд 1) недостижимые операторы (var_dump) 2) строка не возвращает строку 3) смешанный возврат, когда ожидается пустое значение (используйте то же возвращение не возвращает истину) 4) избыточное / не разрешенное использование & apos; 5) конструктор соединения имеет смешанный экземпляр / mysqli неопределенное использование var 6) опечатки

    от
  • @ shiplu.mokadd.im - Я согласен в основном, но это не всегда так. При таком подходе таблицы с небольшим количеством настраиваемых дочерних столбцов могут значительно повысить скорость - Wordpress использует их.

    от
  • virtual -1сохранение данных в ненормализованной таблицеbad практика.

    от
  • Если у вас есть данные, которые представляют собой только один элемент, например, имя, а затем другие данные, которые поступают в виде массива, который вы хотите разделить на столбцы, например Любимые фильмы, вы можете сделать это (где столбцы / значения строятся в соответствии с примером в этом ответе: INSERT INTOtable(имя, $ столбцы) ЗНАЧЕНИЯ («мое имя», $ значения)

    от
  • Также обратите внимание, что вам, возможно, придется добавить одинарные кавычки в$values строка для правильной работы.$values = implode("', '", $escaped_values); $sql = "INSERT INTO fbdata ($columns) VALUES ('$values')";

    от
  • Полностью рабочий код PHP это будет оценено.

    от
  • Обратите внимание, чтоescaping ваши ценности очень важный шаг. Это мешаетsql injection.

    от
  • Не используйтеmysql_real_escape_string, скорее вы должны использоватьmysqli_real_escape_string !!!

    от
  • mysqli_real_escape_string использует теперь ссылку

    от
  • Таблица / таблицы соответствуют точной схеме?

    от Jesvin Jose
  • Ваш первый шаг, вероятно, состоит в том, чтобы определить структуру вашей таблицы (ей); Вы можете сделать это очень легко в phpMyAdmin. Затем проведите некоторое исследование по вставке в таблицы - веб-поиск по «Примеру вставки в PHP PDO». должен вернуть сотни результатов. Наконец, попробуйте, вставьте его в свой вопрос, и кто-то предложит указатели!

    от halfer
  • & quot; мой массив должен быть разделен перед вставкой в таблицу & quot; - это зависит от. Содержит ли ваш массив выше информацию о нескольких таблицах / строках? Если да для второго, да для первого.

    от halfer
15 ответов
  • 1

    Code:

    <?php
     function mysqli_insert_array($table, $data, $exclude = array()) {
        $con=  mysqli_connect("localhost", "root","","test");
         $fields = $values = array();
        if( !is_array($exclude) ) $exclude = array($exclude);
        foreach( array_keys($data) as $key ) {
            if( !in_array($key, $exclude) ) {
                $fields[] = "`$key`";
                $values[] = "'" . mysql_real_escape_string($data[$key]) . "'";
            }
        }
        $fields = implode(",", $fields);
        $values = implode(",", $values);
        if( mysqli_query($con,"INSERT INTO `$table` ($fields) VALUES ($values)") ) {
            return array( "mysql_error" => false,
                          "mysql_insert_id" => mysqli_insert_id($con),
                          "mysql_affected_rows" => mysqli_affected_rows($con),
                          "mysql_info" => mysqli_info($con)
                        );
        } else {
            return array( "mysql_error" => mysqli_error($con) );
        }
    }
    
     $a['firstname']="abc";
     $a['last name']="xyz";
     $a['birthdate']="1993-09-12";
     $a['profilepic']="img.jpg";
     $a['gender']="male";
     $a['email']="[email protected]";
     $a['likechoclate']="Dm";
     $a['status']="1";
    $result=mysqli_insert_array('registration',$a,'abc');
    if( $result['mysql_error'] ) {
        echo "Query Failed: " . $result['mysql_error'];
    } else {
        echo "Query Succeeded! <br />";
        echo "<pre>";
        print_r($result);
        echo "</pre>";
    }
    ?>
    

  • 0

    Code:

    function insertQuery($tableName,$cols,$values,$connection){
      $numberOfColsAndValues = count($cols);
      $query = 'INSERT INTO '.$tableName.' ('.getColNames($cols,$numberOfColsAndValues).') VALUES ('.getColValues($values,$numberOfColsAndValues).')';
       if(mysqli_query($connection, $query))
          return true;
       else{
          echo "Error: " . $query . "<br>" . mysqli_error($connection);
          return false;
       }
    }
    
    function getColNames($cols,$numberOfColsAndValues){
      $result = '';
      foreach($cols as $key => $val){
        $result = $result.$val.', ';
      }
        return substr($result,0,strlen($result)-2);
    }
    
    
    function getColValues($values,$numberOfColsAndValues){
      $result = '';
      foreach($values as $key => $val){
        $val = "'$val'";
        $result = $result.$val.', ';
      }
        return substr($result,0,strlen($result)-2);
    }
    

  • 0

    самый простой способ

    for ($i=0; $i < count($tableData); $i++) { 
    
            $cost     =$tableData[$i]['cost'];
            $quantity =$tableData[$i]['quantity'];
            $price    =$tableData[$i]['price'];
            $p_id     =$tableData[$i]['p_id'];
    
            mysqli_query($conn,"INSERT INTO bill_details (bill_id, price, bill_date, p_id, quantity, cost) VALUES ($bill_id[bill_id],$price,$date,$p_id,$quantity,$cost)");
        }
    

  • 2

    Лично я json_encode массива (принимая во внимание любой экранирование

    и т. Д.) И поместил весь лот в поле текста / блоб соответствующего размера.

    Это позволяет очень легко хранить "неструктурированные" данные, но настоящая PITA для поиска / индексации с любой грацией.

    Простой json_decode будет "взрываться" данные обратно в массив для вас.

  • 0

    У вас есть 2 способа сделать это:

    You can create a table (or multiple tables linked together) with a field for each key of your array, and insert into each field the corresponding value of your array. This is the most common way You can just have a table with one field and put in here your array serialized. I do not recommend you do do that, but it is useful if you don't want a complex database schema.

  • 0

    Недавно я изучаю Wordpress

    он предоставляет класс WP_QUERY для работы с базой данных. Вы можете вставить массив или объект в базу данных. Я чувствую, что это удивительно, поэтому я пойду, чтобы увидеть, как этого добиться. Может быть, некоторые идеи вы можете получить из него. Основная функция:apply_filters.

    apply_filters( $tag, $value, $key);
    

    Вы можете игнорировать первый параметр, обрабатывать второй параметр как массив. Функция выполняет очистку массива в строку.

    после вставки в базу данных вы можете увидеть это:

    key     s:12:"focal_length";s:3:"190";s:3:"iso";s:3:"400";s:13:"shutter_speed";s:6:"0.0004";s:5:"title";s:0:"";}}
    

  • 0

    Самый простой метод для выхода и вставки:

    global $connection;
    $columns = implode(", ",array_keys($array_data));
    $func = function($value) {
        global $connection;
        return mysqli_real_escape_string($connection, $value);
    };
    $escaped_values = array_map($func, array_values($array_data));
    $values  = implode(", ", $escaped_values);
    $result = mysqli_query($connection, "INSERT INTO $table_name ($columns) VALUES ($values)");
    

  • 1

    Insert array data into mysql php

    У меня есть массив данных .. Я хочу разместить эти данные в базе данных

    1: this is my array data:

    stdClass Object
    (
        [questions] => Array
            (
                [0] => stdClass Object
                    (
                        [question_id] => 54
                        [question] => Which%20of%20the%20following%20is%20a%20rational%20number%20(s)%3F%3Cbr%20%2F%3E%0D%0A%3Cbr%20%2F%3E
                        [option_1] => %3Cimg%20align%3D%22middle%22%20%20%20src%3D%22formula%2F54%2F010779c34ce28fee25778247e127b82d.png%22%20alt%3D%22%22%20%2F%3E%3Cspan%20class%3D%22Apple-tab-span%22%20style%3D%22white-space%3A%20pre%3B%20%22%3E%09%3C%2Fspan%3E
                        [option_2] => %26nbsp%3B%3Cimg%20align%3D%22middle%22%20%20%20src%3D%22formula%2F54%2F3af35a16c371ffaaf9ea6891fb732478.png%22%20alt%3D%22%22%20%2F%3E
                        [option_3] => %26nbsp%3B%3Cimg%20align%3D%22middle%22%20%20%20src%3D%22formula%2F54%2F4a57d5766a79f0ddf659d63c7443982b.png%22%20alt%3D%22%22%20%2F%3E
                        [option_4] => %26nbsp%3BAll%20the%20above%26nbsp%3B
                        [iscorrect] => yes
                        [answerGiven] => D
                        [marksobtain] => 2
                        [timetaken] => 3
                        [difficulty_levelval] => 2
                    )
    
    
       [1] => stdClass Object
                    (
                        [question_id] => 58
                        [question] => %3Cdiv%3EIf%20A%20%26nbsp%3B%3A%20Every%20whole%20number%20is%20a%20natural%20number%20and%3C%2Fdiv%3E%0D%0A%3Cdiv%3E%26nbsp%3B%20%26nbsp%3BR%20%3A%200%20is%20not%20a%20natural%20number%2C%3C%2Fdiv%3E%0D%0A%3Cdiv%3EThen%20which%20of%20the%20following%20statement%20is%20true%3F%3C%2Fdiv%3E
                        [option_1] => %26nbsp%3BA%20is%20False%20and%20R%20is%20true.
                        [option_2] => A%20is%20True%20and%20R%20is%20the%20correct%20explanation%20of%20A
                        [option_3] => %26nbsp%3BA%20is%20True%20and%20R%20is%20false
                        [option_4] => %26nbsp%3BBoth%20A%20and%20R%20are%20True
                        [iscorrect] => no
                        [answerGiven] => D
                        [marksobtain] => 0
                        [timetaken] => 2
                        [difficulty_levelval] => 2
                    )
    
            )
    
    )
    

    код, который я использовал для вставки этих данных:

    Код ::

    <?php 
     //require_once("config_new2012.php");
    
    require("codelibrary/fb/facebook.php");
    include("codelibrary/inc/variables.php");
    include_once(INC."functions.php");
    include_once(CLASSES."frontuser_class.php");
    include_once(CLASSES."testdetails_class.php");
    
    
    
    $data = file_get_contents('php://input');
    $arr_data = explode("=",$data);
    $final_data = urldecode($arr_data[1]);
    $final_data2 = json_decode($final_data);
    
    
     //print_r ($final_data2);
    
    
    
     if(is_array($final_data2)){
    echo 'i am in array ';
        $sql = "INSERT INTO p_user_test_details(question_id, question, option_1, option_2, option_3, option_4,iscorrect,answerGiven,marksobtain,timetaken,difficulty_levelval) values ";
    
        $valuesArr = array();
        foreach($final_data2 as $row){
    
            $question_id = (int) $row['question_id'];
            $question = mysql_real_escape_string( $row['question'] );
            $option_1 = mysql_real_escape_string( $row['option_1'] );
        $option_2 = mysql_real_escape_string( $row['option_2'] );
        $option_3 = mysql_real_escape_string( $row['option_3'] );
        $option_4 = mysql_real_escape_string( $row['option_4'] );
        $iscorrect = mysql_real_escape_string( $row['iscorrect'] );
        $answerGiven = mysql_real_escape_string( $row['answerGiven'] );
            $marksobtain = mysql_real_escape_string( $row['marksobtain'] );
            $timetaken = mysql_real_escape_string( $row['timetaken'] );
            $difficulty_levelval = mysql_real_escape_string( $row['difficulty_levelval'] );
            $valuesArr[] = "('$question_id', '$question', '$option_1','$option_2','$option_3','$option_4','$iscorrect','$answerGiven','$marksobtain','$timetaken','$difficulty_levelval')";
        }
    
        $sql .= implode(',', $valuesArr);
    
        mysql_query($sql) or exit(mysql_error()); 
    }
    else{
    
    echo 'no one is there ';
    }
    

  • 84

    You can not insert an array directly to mysql as mysql doesn't understand php data types. Mysql только понимаетSQL, Таким образом, чтобы вставить массив в базу данных MySQL, вы должны преобразовать его в оператор SQL. Это можно сделать вручную или с помощью библиотеки. Выход должен бытьINSERT заявление.

    Вот стандартная инструкция вставки MySQL.

    INSERT INTO TABLE1(COLUMN1, COLUMN2, ....) VALUES (VALUE1, VALUE2..)
    

    если тыhave a table with name fbdata with the columns which are presented in the keys of your array Вы можете вставить с помощью этого небольшого фрагмента. Вот как ваш массив преобразуется в это утверждение.

    $columns = implode(", ",array_keys($insData));
    $escaped_values = array_map('mysql_real_escape_string', array_values($insData));
    $values  = implode(", ", $escaped_values);
    $sql = "INSERT INTO `fbdata`($columns) VALUES ($values)";
    

    Update for PHP7

    Начиная с PHP 5.5mysql_real_escape_string устарел и с PHP7 был удален. Увидеть:Документация Php.net о новой процедуре.

  • 1

    Нужно только написать эту строку, чтобы вставить массив в базу данных.

    $query= "INSERT INTO table ( " . implode(', ',array_keys($insData)) . ") VALUES (" . implode(', ',array_values($insData)) . ")";
    

    implode(', ',array_keys($insData)) : Gives you all keys as string format

    implode(', ',array_values($insData)) : Gives you all values as string format

  • 3

    Сериализация массив, и у вас будет текст в столбце вашей базы данных, который решит проблему.

    Я делаю это, например, для сохранения объектов, чтобы их можно было легко найти.

  • 1

    Я ищу ту же проблему

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

    Видеть этоhttp://www.wpfasthelp.com/insert-php-array-into-mysql-database-table-row-field.htm

  • 1

    Может быть

    это будет сложно для этого вопроса, но это, безусловно, сделает работу за вас. Я создал два класса для обработки не только вставки массивов, но и запросов к базе данных, обновления и удаления файлов. & Quot; MySqliConnection & Quot; Класс используется для создания только одного экземпляра соединения с БД (для предотвращения дублирования новых объектов).

        <?php
        /**
         *
         * MySQLi database connection: only one connection is allowed
         */
        class MySqliConnection{
            public static $_instance;
            public $_connection;
    
            public function __construct($host, $user, $password, $database){
                $this->_connection = new MySQLi($host, $user, $password, $database);
                if (isset($mysqli->connect_error)) {
                    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
                    echo $mysqli->host_info . "\n";
                }
            }
    
            /*
            * Gets instance of connection to database
            * @return (MySqliConnection) Object
            */
            public static function getInstance($host, $user, $password, $database){
                if(!self::$_instance){ 
                    self::$_instance = new self($host, $user, $password, $database); //if no instance were created - new one will be initialize
                }
                return self::$_instance; //return already exsiting instance of the database connection
            }
    
            /*
            * Prevent database connection from bing copied while assignig the object to new wariable
            * @return (MySqliConnection) Object
            */
            public function getConnection(){
                return $this->_connection;
            }
    
            /*
            * Prevent database connection from bing copied/duplicated while assignig the object to new wariable
            * @return nothing
            */
            function __clone(){
    
            }
        }
    
    
        /*// CLASS USE EXAMPLE 
            $db = MySqliConnection::getInstance('localhost', 'root', '', 'sandbox');
            $mysqli = $db->getConnection();
            $sql_query = 'SELECT * FROM users;
                $this->lastQuery = $sql_query;
                $result = $mysqli->query($sql_query);
            while($row = $result->fetch_array(MYSQLI_ASSOC)){
                echo $row['ID'];
            }
    
        */
    

    Второй «TableManager» класс немного сложнее. Он также использует класс MySqliConnection, который я разместил выше. Таким образом, вы должны будете включить их обоих в свой проект. TableManager позволит вам легко вносить обновления и удаления. Класс имеет отдельный заполнитель для чтения и записи.

    <?php
    
    /*
    * DEPENDENCIES:
    * include 'class.MySqliConnection.inc'; //custom class
    *
    */
    
    class TableManager{
    
        private $lastQuery;
        private $lastInsertId;
        private $tableName;
        private $tableIdName;
        private $columnNames = array();
        private $lastResult = array();
        private $curentRow = array();
        private $newPost = array();
    
        /*
        * Class constructor 
        * [1] (string) $tableName // name of the table which you want to work with
        * [2] (string) $tableIdName // name of the ID field which will be used to delete and update records
        * @return void
        */
        function __construct($tableName, $tableIdName){
            $this->tableIdName = $tableIdName;
            $this->tableName = $tableName;
            $this->getColumnNames();
            $this->curentRow = $this->columnNames;
        }
    
    public function getColumnNames(){
        $sql_query = 'SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = "'.$this->tableName.'"';
        $mysqli = $this->connection();
        $this->lastQuery = $sql_query;
        $result = $mysqli->query($sql_query);
        if (!$result) {
            throw new Exception("Database Error [{$this->database->errno}] {$this->database->error}");
        }
        while($row = $result->fetch_array(MYSQLI_ASSOC)){           
            $this->columnNames[$row['COLUMN_NAME']] = null;
        }
    }
    
        /*
        * Used by a Constructor to set native parameters or virtual array curentRow of the class
        * [1] (array) $v
        * @return void
        */
        function setRowValues($v){
    
            if(!is_array($v)){
                $this->curentRow = $v;
                return true;    
            }
            foreach ($v as $a => $b) {
                $method = 'set'.ucfirst($a);
                if(is_callable(array($this, $method))){
                    //if method is callable use setSomeFunction($k, $v) to filter the value
                    $this->$method($b);
                }else{
                    $this->curentRow[$a] = $b;
                }
            }
    
        }
    
        /*
        * Used by a constructor to set native parameters or virtual array curentRow of the class
        * [0]
        * @return void
        */
        function __toString(){
            var_dump($this);
        }
    
        /*
        * Query Database for information - Select column in table where column = somevalue
        * [1] (string) $column_name // name od a column
        * [2] (string) $quote_pos // searched value in a specified column
        * @return void
        */
        public function getRow($column_name = false, $quote_post = false){
            $mysqli = $this->connection();
            $quote_post = $mysqli->real_escape_string($quote_post);
            $this->tableName = $mysqli->real_escape_string($this->tableName);
            $column_name = $mysqli->real_escape_string($column_name);
            if($this->tableName && $column_name && $quote_post){
                $sql_query = 'SELECT * FROM '.$this->tableName.' WHERE '.$column_name.' = "'.$quote_post.'"';
                $this->lastQuery = $sql_query;
                $result = $mysqli->query($sql_query);
                if (!$result) {
                    throw new Exception("Database Error [{$this->database->errno}] {$this->database->error}");
                }
                while($row = $result->fetch_array(MYSQLI_ASSOC)){
                    $this->lastResult[$row['ID']] = $row;
                    $this->setRowValues($row);
                }
            }
            if($this->tableName && $column_name && !$quote_post){
                $sql_query = 'SELECT '.$column_name.' FROM '.$this->tableName.'';
                $this->lastQuery = $sql_query;
                $result = $mysqli->query($sql_query);
                if (!$result) {
                    throw new Exception("Database Error [{$this->database->errno}] {$this->database->error}");
                }
                while($row = $result->fetch_array(MYSQLI_ASSOC)){           
                    $this->lastResult[] = $row;
                    $this->setRowValues($row);
                }       
            }
            if($this->tableName && !$column_name && !$quote_post){
                $sql_query = 'SELECT * FROM '.$this->tableName.'';
                $this->lastQuery = $sql_query;
                $result = $mysqli->query($sql_query);
                if (!$result) {
                    throw new Exception("Database Error [{$this->database->errno}] {$this->database->error}");
                }
                while($row = $result->fetch_array(MYSQLI_ASSOC)){           
                    $this->lastResult[$row['ID']] = $row;
                    $this->setRowValues($row);
                }       
            }
        }
    
    
        /*
        * Connection class gets instance of db connection or if not exsist creats one
        * [0]
        * @return $mysqli
        */
        private function connection(){
            $this->lastResult = "";
            $db = MySqliConnection::getInstance('localhost', 'root', '', 'sandbox');
            $mysqli = $db->getConnection();
            return $mysqli;
        }
    
        /*
        * ...
        * [1] (string) $getMe
        * @return void
        */
        function __get($getMe){
            if(isset($this->curentRow[$getMe])){
                return $this->curentRow[$getMe];
            }else{
                throw new Exception("Error Processing Request - No such a property in (array) $this->curentRow", 1);
            }
    
        }
    
        /*
        * ...
        * [2] (string) $setMe, (string) $value
        * @return void
        */
        function __set($setMe, $value){
            $temp = array($setMe=>$value);
            $this->setRowValues($temp);
        }
    
        /*
        * Dumps the object
        * [0] 
        * @return void
        */
        function dump(){
            echo "<hr>";
            var_dump($this);
            echo "<hr>";
        }
    
        /*
        * Sets Values for $this->newPost array which will be than inserted by insertNewPost() function
        * [1] (array) $newPost //array of avlue that will be inserted to $this->newPost
        * @return bolean
        */
        public function setNewRow($arr){
    
            if(!is_array($arr)){
                $this->newPost = $arr;
                return false;   
            }
            foreach ($arr as $k => $v) {
                if(array_key_exists($k, $this->columnNames)){
                    $method = 'set'.ucfirst($k);
                    if(is_callable(array($this, $method))){
                        if($this->$method($v) == false){ //if something go wrong
                            $this->newPost = array(); //empty the newPost array and return flase
                            throw new Exception("There was a problem in setting up New Post parameters. [Cleaning array]", 1);
                        }
                    }else{
                        $this->newPost[$k] = $v;
                    }
                }else{
                    $this->newPost = array(); //empty the newPost array and return flase
                    throw new Exception("The column does not exsist in this table. [Cleaning array]", 1);
                }
            }
    
        }
    
    
        /*
        * Inserts new post held in $this->newPost
        * [0]
        * @return bolean
        */
        public function insertNewRow(){
            // check if is set, is array and is not null
            if(isset($this->newPost) && !is_null($this->newPost) && is_array($this->newPost)){
                $mysqli = $this->connection();
                $count_lenght_of_array = count($this->newPost);
    
                // preper insert query
                $sql_query = 'INSERT INTO '.$this->tableName.' (';
                $i = 1;
                foreach ($this->newPost as $key => $value) {
                    $sql_query .=$key;
                    if ($i < $count_lenght_of_array) {
                        $sql_query .=', ';
                    }
    
                    $i++;
                 } 
    
                $i = 1;  
                $sql_query .=') VALUES (';
                foreach ($this->newPost as $key => $value) {
                    $sql_query .='"'.$value.'"';
                    if ($i < $count_lenght_of_array) {
                        $sql_query .=', ';
                    }
    
                    $i++;
                 }  
    
                $sql_query .=')';
                var_dump($sql_query);
                if($mysqli->query($sql_query)){
                    $this->lastInsertId = $mysqli->insert_id;
                    $this->lastQuery = $sql_query;
                }
    
                $this->getInsertedPost($this->lastInsertId);
            }
        }   
    
        /*
        * getInsertedPost function query the last inserted id and assigned it to the object.
        * [1] (integer) $id // last inserted id from insertNewRow fucntion
        * @return void
        */
        private function getInsertedPost($id){
            $mysqli = $this->connection();
            $sql_query = 'SELECT * FROM '.$this->tableName.' WHERE '.$this->tableIdName.' = "'.$id.'"';
            $result = $mysqli->query($sql_query);
            while($row = $result->fetch_array(MYSQLI_ASSOC)){
                $this->lastResult[$row['ID']] = $row;
                $this->setRowValues($row);
            }       
        }
    
        /*
        * getInsertedPost function query the last inserted id and assigned it to the object.
        * [0]
        * @return bolean // if deletion was successful return true
        */
        public function deleteLastInsertedPost(){
            $mysqli = $this->connection();
            $sql_query = 'DELETE FROM '.$this->tableName.' WHERE '.$this->tableIdName.' = '.$this->lastInsertId.'';
            $result = $mysqli->query($sql_query);
            if($result){
                $this->lastResult[$this->lastInsertId] = "deleted";
                return true;
            }else{
                throw new Exception("We could not delete last inserted row by ID [{$mysqli->errno}] {$mysqli->error}");
    
            }
            var_dump($sql_query);       
        }
    
        /*
        * deleteRow function delete the row with from a table based on a passed id
        * [1] (integer) $id // id of the table row to be delated
        * @return bolean // if deletion was successful return true
        */
        public function deleteRow($id){
            $mysqli = $this->connection();
            $sql_query = 'DELETE FROM '.$this->tableName.' WHERE '.$this->tableIdName.' = '.$id.'';
            $result = $mysqli->query($sql_query);
            if($result){
                $this->lastResult[$this->lastInsertId] = "deleted";
                return true;
            }else{
                return false;
            }
            var_dump($sql_query);       
        }
    
        /*
        * deleteAllRows function deletes all rows from a table
        * [0]
        * @return bolean // if deletion was successful return true
        */
        public function deleteAllRows(){
            $mysqli = $this->connection();
            $sql_query = 'DELETE FROM '.$this->tableName.'';
            $result = $mysqli->query($sql_query);
            if($result){
                return true;
            }else{
                return false;
            }       
        }
    
        /*
        * updateRow function updates all values to object values in a row with id
        * [1] (integer) $id
        * @return bolean // if deletion was successful return true
        */
        public function updateRow($update_where = false){
            $id = $this->curentRow[$this->tableIdName];
            $mysqli = $this->connection();
            $updateMe = $this->curentRow;
            unset($updateMe[$this->tableIdName]);
            $count_lenght_of_array = count($updateMe);
            // preper insert query
            $sql_query = 'UPDATE '.$this->tableName.' SET ';
            $i = 1;
            foreach ($updateMe as $k => $v) {
                $sql_query .= $k.' = "'.$v.'"';
                if ($i < $count_lenght_of_array) {
                    $sql_query .=', ';
                }
    
                $i++;
             }
            if($update_where == false){ 
                //update row only for this object id
                $sql_query .=' WHERE '.$this->tableIdName.' = '.$this->curentRow[$this->tableIdName].'';
            }else{
                //add your custom update where query
                $sql_query .=' WHERE '.$update_where.'';
            }
    
            var_dump($sql_query);
            if($mysqli->query($sql_query)){
                $this->lastQuery = $sql_query;
            }
            $result = $mysqli->query($sql_query);
            if($result){
                return true;
            }else{
                return false;
            }       
        }
    
    }
    
    
    
    /*TO DO
    
    1 insertPost(X, X) write function to isert data and in to database;
    2 get better query system and display data from database;
    3 write function that displays data of a object not databsae;
    object should be precise and alocate only one instance of the post at a time. 
    // Updating the Posts to curent object $this->curentRow values
    ->updatePost();
    
    // Deleting the curent post by ID
    
    // Add new row to database
    
    */
    
    
    
    
    
    /*
    USE EXAMPLE
    $Post = new TableManager("post_table", "ID"); // New Object
    
    // Getting posts from the database based on pased in paramerters
    $Post->getRow('post_name', 'SOME POST TITLE WHICH IS IN DATABASE' );
    $Post->getRow('post_name');
    $Post->getRow();
    
    
    
    MAGIC GET will read current object  $this->curentRow parameter values by refering to its key as in a varible name
    echo $Post->ID.
    echo $Post->post_name;
    echo $Post->post_description;
    echo $Post->post_author;
    
    
    $Task = new TableManager("table_name", "table_ID_name"); // creating new TableManager object
    
    $addTask = array( //just an array [colum_name] => [values]
        'task_name' => 'New Post',
        'description' => 'New Description Post',
        'person' => 'New Author',
        );
    $Task->setNewRow($addTask); //preper new values for insertion to table
    $Task->getRow('ID', '12'); //load value from table to object
    
    $Task->insertNewRow(); //inserts new row
    $Task->dump(); //diplays object properities
    
    $Task->person = "John"; //magic __set() method will look for setPerson(x,y) method firs if non found will assign value as it is. 
    $Task->description = "John Doe is a funny guy"; //magic __set() again
    $Task->task_name = "John chellange"; //magic __set() again
    
    $test = ($Task->updateRow("ID = 5")) ? "WORKS FINE" : "ERROR"; //update cutom row with object values
    echo $test;
    $test = ($Task->updateRow()) ? "WORKS FINE" : "ERROR"; //update curent data loaded in object
    echo $test;
    */
    

  • 0

    Давайте не будем забывать самое важное

    что можно узнать из такого вопроса:SQL-инъекция.

    использованиеPDO а такжеготовые заявления.

    НажмитеВот для учебника по PDO.

  • 15

    Есть несколько разных способов ... Я приведу пример того

    как использовать подготовленные операторы:

    $prep = array();
    foreach($insData as $k => $v ) {
        $prep[':'.$k] = $v;
    }
    $sth = $db->prepare("INSERT INTO table ( " . implode(', ',array_keys($insData)) . ") VALUES (" . implode(', ',array_keys($prep)) . ")");
    $res = $sth->execute($prep);
    

    Я обманываю здесь и предполагаю, что ключи в вашем первом массиве являются именами столбцов в таблице SQL. Я также предполагаю, что у вас есть доступный PDO. Больше можно найти наhttp://php.net/manual/en/book.pdo.php