2015-07-20 1 views
-2

Ниже мой код -Extract имя индекса ассоциативного массива automatch имени столбца базы данных

$insert_details = array("username"=>"pavan", "firstname"=>"pavan", "lastname"=>"r", "profile_about"=>"My name is Pavan R."); 
$connection->insert($insert_details);  

     public function insert(array $insert_details) { 

      $insert_query = "INSERT INTO user (username,firstname,lastname,profile_about) VALUES ($insert_details['username'],$insert_details['firstname'],$insert_details['lastname'],insert_details['profile_about'])"; 
      $run_insert_query = mysqli_query($this->mysql_con, $insert_query); 

      if ($run_insert_query) { 

       $select_query = "SELECT * FROM user ORDER BY id DESC LIMIT 1"; 
       $run_select_query = mysqli_query($this->mysql_con, $select_query); 

       while ($selected_row = mysqli_fetch_array($run_select_query)) { 
        $id = $selected_row['id']; 
        $username = $selected_row['username']; 
        $firstname = $selected_row['firstname']; 
        $lastname = $selected_row['lastname']; 
        $profile_about = $selected_row['profile_about']; 
       } 

       $es_insert = array(); 
       $es_insert['body'] = array('id' => $id, 'username' => $username, 'firstname' => $firstname, 'lastname' => $lastname, 'profile_about' => $profile_about); 
       $es_insert['index'] = 'test'; 
       $es_insert['type'] = 'jdbc'; 
       $es_insert['id'] = $id; 
       $check_insert = $this->es_con->index($es_insert); 

       if($check_insert) { 
        echo nl2br("Successfully inserted to both database and elasticsearch\n"); 
       } 
      } 
      else { 
       echo nl2br("Failed to insert into database hence closing the connection\n");    
      } 
     } 

Когда я запускаю код я получаю следующее сообщение об ошибке -

PHP Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in /var/www/html/es/combined.php on line 38 

Это происходит из-за SQL query ($ insert_query). Может кто-то, пожалуйста, помогите мне отладить это?

Также есть способ извлечь имена индексов из массива и передать его в поля базы данных. В приведенном выше коде я объявлял ассоциативный массив с именами индексов, аналогичными именам столбцов базы данных. Можно ли получить эти имена индексов массива и оптимизировать запрос SQL просто -

$insert_query = "INSERT INTO user VALUES ($insert_details['username'],$insert_details['firstname'],$insert_details['lastname'],insert_details['profile_about'])"; 

Она должна автоматически извлекать подходящие имена столбцов из имени индекса массива.

+0

Вам также нужно удалить строки поверх публичной функции. – Daan

+0

* «Кто-нибудь может помочь мне отладить это?» * Сначала вам нужно будет показать, что вы прилагаете значительные усилия (включая исследование ошибки), и было бы полезно показать, что такое строка 38. – Anonymous

+0

Я объявил функцию внутри класса, а функция называется внешним классом. –

ответ

0

Вы не можете процитировать ключи массива в " -quoted строк:

php > echo "$arr['foo']"; 
PHP Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in php shell code on line 1 

Либо идти с

$sql = "... $insert_details[username] ..." 
          ^-------^---no quotes 

или

$sql = "... {$insert_details['username']} ..." 
      ^---------------------------^---brace syntax 

И заметьте, что вы уязвимы для sql injection attacks.

+0

Возможно ли получить эти имена индексов массива и оптимизировать SQL-запрос только для '$ insert_query =" INSERT INTO пользователь VALUES ($ insert_details ['username'], $ insert_details ['firstname'], $ insert_details ['lastname'], insert_details ['profile_about']) ";' Он должен автоматически извлекать подходящие имена столбцов из имени индекса массива , –

+0

технически, да. используйте подготовленный оператор и привяжите ваши заполнители к отдельным элементам массива, но это не «автоматическое». –

+0

Не могли бы вы объяснить мне пример. –

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