2015-06-09 5 views
0

У меня есть то, что должно быть простой проблемой для решения. У меня есть данные, которые необходимо вставить в мою БД для экспорта в CSV в будущем, однако стандартный PHP-код для меня не работает, я пробовали следующую строку, не повезло:Вставка данных в базу данных mysql с помощью cakePHP

$insertQuery = ("INSERT INTO `DBNAME`.`TABLENAME` (`1`, `2`, `3`, `4`, `5`, `6`, `7`) VALUES ('{$1}', '{$2}', '{$3}', '{$cityquery['city']}', '{$cityquery['regionName']}', '{$cityquery ['country']}', '{$lang}')"); 

Заранее благодарен!

+1

Вам нужно предоставить дополнительную информацию - ваш код просто показывает строку, нет функций базы данных – Steve

+0

Попробуйте добавить 'echo $ insertQuery;' сразу же после того, как вы ее объявите, и вставьте сюда, чтобы помочь нам понять проблему. – BradzTech

+0

Добавил это и получил следующую информацию: INSERT INTO 'DBNAME'''TABLENAME' (' 1', '2',' 3', '4',' 5', '6',' 7') VALUES (' 1 ',' 2 ',' 3 ',' city ',' state ',' country ',' en ') – Steve

ответ

2

G'day Стив,

Могу ли я спросить, почему вы используете SQL в CakePHP?

CakePHP использует модели и подход ORM для управления данными. Что можно найти здесь: http://book.cakephp.org/2.0/en/models.html

Предполагаю, что вы используете V2, потому что это тот, с кем я владею.

CakePHP навязывает вам назвать свои имена таблиц базы данных в форме множественного числа и классы моделей в единственном числе (например)

Database table name = users, 
Model i.e (Class) name = User 

Теперь, когда вы хотите сохранить данные пользователя, мы просто используем ORM CakePHP-

$this->User->save(); <- Now, assume we want to add a new record, we simply do: 
$this->User->save(array('first_name' => 'Melon', 'last_name' => 'Head')); 

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

$this->User->id = 1; 
$this->User->save(array('email' => '[email protected]')); 

ИЛИ один я использую

$this->User->save(array('id' => 1, 'email' => '[email protected]')); 

Я надеюсь, что это ответ на ваш вопрос :)

я продлить его немного больше. Итак, вы упомянули, что имя таблицы - это «оценки». Таким образом, в нашей «/ приложении модель» папке в CakePHP мы создали бы файл PHP с именем Assessment.php внутри файла мы имеем:

class Assessment extends AppModel{} 

Это первый шаг, чтобы подключиться к БД, есть файл в 'app/Config/database.php'. Когда мы откроем этот файл, мы увидим массив:

public $default = array(
    'datasource' => 'Database/Mysql', 
    'persistent' => false, 
    'host' => 'localhost', 
    'login' => 'mysql_user', 
    'password' => 'da_password', 
    'database' => 'the_db_name', 
    'encoding' => 'utf8' 
); 

Установите этот массив, чтобы он мог подключиться к db.

Теперь мы перейдем к контроллеру. Я предполагаю, что у вас есть настройка контроллера под названием AssessmentController.php, если вы этого не сделаете, мы исправим это в ближайшее время.

В контроллере, мы настроить функцию, которая будет сохранять свои данные, например

public function index(){ 
     //Here we'll save the data 
     //I'll assume also you know where $1 is coming from. 
     //Data from the user comes through the array var $this->request->data 
    $this->Assessment->save(
      array(
       '1' => "{$1}" 
      ) 
    ); 
} 

Если у вас есть другая установка имени контроллера, это нормально. CakePHP автоматически соединяет имена одинаковых моделей и контроллеров вместе в приведенном выше примере. У нас есть контроллер оценки и оценочная модель.

Если у нас есть другой контроллер, например, контроллер называется Student, мы просто добавляем массив к контроллеру под названием $ uses

public $uses = array('Assessment'); 

Это скажет CakePHP «Эй, мне нужна эта модель». CakePHP отвечает: «Вот иди».

+0

Я также забыл упомянуть, я надеюсь, что данные в вашей строке INSERT будут дезинфицированы до их использования. Вы также должны использовать Связанные параметры для повышенной безопасности. – Tim

+0

Вы все еще можете сделать это с помощью ORM, перейдя в $ this-> TABLENAME-> save (array ('1' => "{$ 1}", '2' => "{$ 2 }")) и так далее. Конечно, убедитесь, что у вас установлена ​​модель – Tim

+0

. Причина использования этого заключается в том, что люди собираются заполнить форму и данные передаются, но результаты в формах 1, 2, 3, 4 соответствуют соответствующему множественному выбору ответы на форму. Имя базы данных в этом случае является оценкой, я предполагаю, что мне нужны только две строки кода, одна для идентификации БД в этом случае оценки, а другая - для загрузки данных. Я не понимаю, как писать строки. Это мой первый раз, когда я использовал cakePHP, и, хотя у меня не было проблем с его отправкой электронной почты с небольшим исследованием, это привело меня в тупик. Снова спасибо – Steve

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