【问题标题】:PHP PDO and Mysql [closed]PHP PDO 和 Mysql [关闭]
【发布时间】:2015-09-02 02:19:29
【问题描述】:
<?php
// include to get database connection
include_once 'config/db.php';

try{
    $a_id = "SELECT a.id FROM aluno a, utilizador u WHERE a.utilizador_id = u.id
    AND u.nome =" . $_POST['nome'];
    $prof = 1; 

    $query = "INSERT INTO classificacao(nota, semestre, dt_classif, 
    aluno_id, utilizador_id) VALUES (nota=:nota, semestre=:semestre, dt_classif=DEFAULT ,
    aluno_id=:aluno_id, utilizador_id=:utilizador_id)";

    $stmt = $con->prepare($query);

    $stmt->bindParam(":nota", $_POST['nota']);
    $stmt->bindParam(":semestre", $_POST['semestre']);
    $stmt->bindParam(":aluno_id", $a_id);
    $stmt->bindParam(":utilizador_id", $prof);

    // execute the query
    if($stmt->execute()){
        echo "Product was created.";
    }else{
        echo "Unable to create product.";
    }
}
catch(PDOException $exception){
    echo "Error: " . $exception->getMessage();
}

?>

我正在使用 jQuery 和 PHP 创建一个 CRUD,我几乎可以确定错误在这个文件中,我无法创建数据,并且回显“产品已创建”。和“无法创建产品”。不在任何地方显示。我想知道你是否可以帮忙

【问题讨论】:

  • 我们应该怎么知道?你不说有什么问题吗?你有错误吗? “出了点问题”并没有说明什么。
  • @Fred-ii- 我的查询怎么全错了?
  • 你想用$a_id做什么?将查询存储在您的数据库中??
  • 在打开连接后立即添加$con-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);,你就会明白我的意思了。

标签: php mysql pdo


【解决方案1】:

这是一个粗略的答案,应该可以解决注入问题、非执行查询问题和不正确的insert 语法。我没有你的数据库,所以我无法确认它是否功能齐全,但它应该更接近..

<?php
// include to get database connection
include_once 'config/db.php';
try{
    $a_id = "SELECT a.id as aid FROM aluno a, utilizador u WHERE a.utilizador_id = u.id
    AND u.nome = ?";
    $stmt = $con->prepare($query);
    $stmt->execute(array($_POST['nome']));
    while ($row = $stmt->fetch_assoc()) {
        $aids[] = $row['aid'];
        $a_id = $row['aid'];
    }
    // what are you doing if there are more than one record?
    // current execution will only have the last id as $a_id
    $prof = 1; 
    $query = "INSERT INTO classificacao(nota, semestre, aluno_id, utilizador_id) 
                VALUES (?, ?, ?, ?)";
    $stmt = $con->prepare($query);
    // execute the query
    if($stmt->execute(array($_POST['nota'], $_POST['semestre'], $a_id, $prof))){
        echo "Product was created.";
    }else{
        echo "Unable to create product.";
    }
}
catch(PDOException $exception){
    echo "Error: " . $exception->getMessage();
}
?>

注意这里使用的insert 语法。在开始时,您定义列

INSERT INTO classificacao(nota, semestre, aluno_id, utilizador_id)

然后在values 之后传递值。每个值用逗号分隔。

值 (?, ?, ?, ?)

您不会在其中传递列。 ? 是进入数据库的值的占位符。

进一步阅读的链接:

How can I prevent SQL injection in PHP?
http://dev.mysql.com/doc/refman/5.6/en/insert.html
https://dev.mysql.com/doc/refman/5.0/en/update.html
http://php.net/manual/en/pdo.prepared-statements.php

【讨论】:

  • 非常感谢兄弟,解决了我的问题,我一定会去看看!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多