PDO基于另一个字段插入查询

时间:2015-10-18 14:00:04

标签: php mysql pdo

我有一个名为' users'包含'用户名'和' team_name'列。 我创建了一个表单,根据'用户名'填充两个选择的下拉列表。来自用户表和' team_name'来自'团队'表

我现在正在尝试创建一个带有' team_name'的插入语句。和'用户名'选择并输入' team_name'进入'用户'表格'用户名'等于下拉列表提供的一个。

$result = $conn->prepare("INSERT INTO users (`team_name`) VALUES ('{$teamname}') WHERE username = $username");

我收到语法错误SQLState [420000] - 我认为这是因为我没有在语句中的任何其他位置声明用户名即列 - 但是,我不想给它一个值 - 我只是想让它发布team_name到提供的特定用户名。

解决这个问题的最佳方法是什么?

更新:

即使使用

UPDATE users SET team_name=$teamname WHERE username=$username 

我仍然收到错误

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'grillzeE' in 'where clause

当用户名列中存在用户名时。

2 个答案:

答案 0 :(得分:0)

我认为这是您正在寻找的查询:

INSERT INTO users (team_name)
SELECT team_name
FROM   teams
WHERE  username = ?

答案 1 :(得分:0)

如果这是PDO,那么通过在查询中实际指定变量值而不是作为绑定变量,您将失去预准备语句的好处。通常,您应该使用占位符作为变量,然后在运行时替换它们。

$stmt= $conn->prepare("INSERT INTO users (`team_name`) VALUES (:teamname) WHERE username = :username");

if( isset( $username ) && isset( $teamname ) ){
    $params=array(':teamname' => $teamname, ':username' => $username );
    foreach( $params as $key => &$val ) {
        $stmt->bindParam( $key, $val );
    }
    $stmt->execute();
}