【问题标题】:Inserting data into mysql DB with cakePHP使用 cakePHP 将数据插入 mysql 数据库
【发布时间】:2015-08-23 15:21:02
【问题描述】:

我有一个简单的问题需要解决,我有数据需要插入到我的数据库中以便将来导出到 CSV 但是标准的 PHP 代码对我不起作用,我尝试了以下行,没有运气:

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

提前致谢!

【问题讨论】:

  • 您需要提供更多信息 - 您的代码只显示一个字符串,没有数据库函数
  • 请在声明后立即尝试添加echo $insertQuery;,并将其粘贴到此处以帮助我们了解问题。
  • 添加并收到以下信息:INSERT INTO DBNAME.TABLENAME (1, 2, 3, 4, 5, 6, 7) 值('1'、'2'、'3'、'city'、'state'、'country'、'en')
  • 您使用的是哪个版本的 CakePHP? CakePHP 3 处理数据库的方法与 CakePHP 2 完全不同。

标签: php mysql database cakephp insert


【解决方案1】:

史蒂夫,

请问您为什么在 CakePHP 中使用 SQL?

CakePHP 使用模型和 ORM 方法来管理数据。可以在这里找到:http://book.cakephp.org/2.0/en/models.html

我假设您使用的是 V2,因为这是我精通的版本。

CakePHP 强制您以复数形式调用数据库表名,并以单数形式调用模型类(例如)

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

现在当你想将数据保存到用户时,我们只需使用 CakePHP 的 ORM

$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' => 'melon.head@yahoo.com'));

或者我用的那个

$this->User->save(array('id' => 1, 'email' => 'melon.head@yahoo.com'));

我希望这能回答你的问题:)

我会再扩展一点。您提到表名是“评估”。因此,在 CakePHP 的 'app/Model' 文件夹中,我们将在我们拥有的文件中创建一个名为 Assessment.php 的 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'
);

设置此数组,使其可以连接到数据库。

现在我们转到控制器。我假设您有一个名为 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 响应“给你”。

【讨论】:

  • 我也忘了提一下,我希望您的 INSERT 字符串中的数据在使用之前经过清理。您还应该使用 Bound 参数来提高安全性
  • 您仍然可以使用 ORM 执行此操作,方法是 $this->TABLENAME->save(array('1' => "{$1}", '2' => "{$2}" )) 等等。当然,请确保您有模型设置
  • 之所以用这个,是因为人要填表,传数据,结果却是1、2、3、4的形式,对应多选题的答案形式。在这种情况下,数据库名称是评估,我猜我只需要 2 行代码,在这种情况下用于识别数据库评估,另一行用于上传数据。我不明白应该如何写这些行。这是我第一次使用 cakePHP,虽然我没有任何问题让它发送电子邮件并进行一些研究,但这让我很难过。再次感谢
  • 好的,清除了“第 2 行”,但是如何设置模型以及这样做的目的究竟是什么?我基本上只是想写, $this->assessments->save(array('1' => "{$1}", '2' => "{$2}"))... 但你说的是上面的一行是必要的,我不明白。
  • 我在上面扩展了我的答案,希望这能进一步帮助你。 CakePHP 使用流行的 MVC 方法。
猜你喜欢
  • 1970-01-01
  • 2014-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 2013-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多