将输入名称作为数据库表中的一行读取

时间:2017-03-12 19:45:11

标签: php mysql oop web

当我尝试在我的php应用程序中添加一个新工作室时,在这个例子中我使用newstudio作为名称我得到这个错误我认为它读取了我在数据库表中作为一行的名称  致命错误:未捕获的异常'PDOException',消息'SQLSTATE [42S22]:未找到列:1054 Champ'newstudio'inconnu dans字段列表'

private $conn;

public function __construct()
{
    $database = new Database();
    $db = $database->dbConnection();
    $this->conn = $db;
}
public function addStudio($sname,$sdes,$sidusr)
{
    $stmt = $this->conn->prepare("INSERT INTO studio (name,des,idusr) VALUES ($sname,$sdes, $sidusr)");
    $stmt->execute();
}

2 个答案:

答案 0 :(得分:1)

如果您有字符串值,则应使用围绕这些变量的单引号

public function addStudio($sname,$sdes,$sidusr)
{
    $stmt = $this->conn->prepare("INSERT INTO studio (name,des,idusr)
          VALUES ('$sname','$sdes', '$sidusr')");
$stmt->execute();
}

或者您可以使用参数化查询

public function addStudio($sname,$sdes,$sidusr)
{
    $stmt = $this->conn->prepare("INSERT INTO studio (name,des,idusr)
          VALUES (:sname,:sdes, ':sidusr)");
    $stmt->bindParam(':sname', $sname);
    $stmt->bindParam(':sdes', $sdes);
    $stmt->bindParam(':sidusr', $sidusr);

    $stmt->execute();
}

答案 1 :(得分:0)

值需要'缠绕它,但不要自己添加。 您已经在使用prepare(),请使用它。

public function addStudio($sname,$sdes,$sidusr){
  $stmt = $this->conn->prepare("INSERT INTO studio (name,des,idusr) VALUES (?,?,?)");
  $stmt->execute([$sname, $sdes, $sidusr]);
}

此外,您应该检查$stmt的值并验证execute()是否正确完成了其工作。