【问题标题】:php, pdo mysql can't insert with inner joinphp, pdo mysql 无法插入内部连接
【发布时间】:2014-05-09 08:12:28
【问题描述】:

所以我有点坚持以下。我有两个表,项目和更改。

项目:

- id
- title
- description
- datecreated

变化:

- id
- title
- description
- projectid FOREIGN KEY
- datecreated

我不知道该怎么做

insert into change (name, description, projectid) value (:name, :description, :projectid)
select id from project
where name = $name

重要 - 插入中的名称和描述由 php 变量使用表单提供。

重要 - 必须使用 PDO

实际代码:

$sql = "INSERT INTO change (title, description, project_id) SELECT :title, :description, id FROM project WHERE title = :project_title";
$query = $db->prepare($sql);
$query->execute(array(":title" => $title, ":description" => $description, ":project_title" => $created));

这就是我最后所做的,但 Barmar 在这个问题和另一个问题上得到了帮助。

   $sql = "INSERT INTO `change` (`title`, `description`, `project_id`) SELECT :title, :description, id FROM project WHERE title = :project_title";
$query = $db->prepare($sql);
$query->execute(array(":title" => $title, ":description" => $description, ":project_title" => $created));

【问题讨论】:

  • 请不要仅在“我希望您使用某种技术为我编写代码”的含义中使用某些标签。谢谢。
  • :name 占位符中的名称和 $name 变量中的名称有区别吗?为什么要在 PDO 中使用变量替换——你显然知道如何使用占位符,你应该一直使用它们。

标签: php mysql


【解决方案1】:

插入时,您可以使用values 子句或使用select 来指定数据源。不能同时使用。

你想要:

INSERT INTO `change` (`title`, `description`, `projectid`)
SELECT :title, :description, id
FROM project
WHERE title = :project_title

【讨论】:

  • 为什么description列中有冒号:?错字?
  • 根据问题中的定义,项目中的名称列与更改无关。相反,项目名称应该注入另一个占位符,例如 :projectname。 @asprin:冒号表示注入到准备好的语句中的参数(命名占位符)。
  • 我会在上面的 cmets 中等待我的问题的答案。
  • @Lukas 啊,我明白了,但是为什么nameid 在这条线上SELECT name, :description, id FROM project 上没有呢?
  • @asprin 因为nameid 来自project 表,所以:description 来自用户输入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-25
  • 2014-08-13
  • 1970-01-01
  • 1970-01-01
  • 2014-11-24
  • 2012-11-28
相关资源
最近更新 更多