PHP更新没有';t更新

PHP更新没有';t更新,php,Php,查询在mysql中运行,提交时没有捕获,但数据不会更新。有没有关于为什么这不起作用或者如何调试的建议 <?php if( $_SERVER['REQUEST_METHOD'] == "POST" ) { // var_dump($_POST["first_name"]); try { // this needs to be a lot more secure! // read PDO manual $id =

查询在mysql中运行,提交时没有捕获,但数据不会更新。有没有关于为什么这不起作用或者如何调试的建议

<?php
if( $_SERVER['REQUEST_METHOD'] == "POST" )  
{
    // var_dump($_POST["first_name"]);
    try
    {

        // this needs to be a lot more secure! 
        // read PDO manual
        $id = $_GET['id'];

        // $description     = $_POST["description"];
        $first_name = $_POST["first_name"];
        $last_name  = $_POST["last_name"];
        $description = $_POST["description"];

        $sql = $db->prepare("UPDATE `exhibitors` SET first_name = '$first_name' WHERE id = '52'");


        $update = $db->query($sql);
    }
    catch ( Exception $e )
    {
        echo " Data could not be updated from the database.";
    }
}

此处未正确使用
prepare()
(或
query()
prepare()
用于创建一个“prepared语句”,该语句与
execute()
一起运行,
query()
用于运行SQL查询字符串

不要将您的
$\u POST
值连接到查询字符串中,这就是您接受SQL注入的方式。您忽略了使用准备好的语句的全部要点

这是针对MySQLi的:

$id = $_GET['id'];

// $description = $_POST["description"];
$first_name = $_POST["first_name"];
$last_name  = $_POST["last_name"];
$description = $_POST["description"];

$sql = $db->prepare("UPDATE `exhibitors` SET first_name = ? WHERE id = ?");
$sql->bind_param('sd', $first_name, $id);

$sql->execute();
见文件:

如果您使用的是PDO,那么语法就有点不同

$id = $_GET['id'];

// $description = $_POST["description"];
$first_name = $_POST["first_name"];
$last_name  = $_POST["last_name"];
$description = $_POST["description"];

$sql = $db->prepare("UPDATE `exhibitors` SET first_name = :first_name WHERE id = :id");

$sql->execute(array(
    'first_name' => $first_name,
    'id' => $id
));

对于准备好的语句,您应该使用以下内容

$sql = $db->prepare('UPDATE exhibitors SET first_name = :first_name WHERE id = :id');
$sql->execute(array('first_name' => $first_name,'id' => 52));
如果您只想使用查询语句(哪一个不应该,接受SQL注入)


您没有正确使用
prepare()
。do echo(“更新
参展商”
设置首名=“$first\u name”其中id='52'”`查看您使用的是MySQLi还是PDO的输出?您在哪里声明
$db
?@Fred-ii-,因为您的第一个非建设性评论“调试您的代码”,我补充了这一点,很明显我刚刚开始学习PHP。事实上,我不是-我遵循了使用PDO的团队树屋教程-我对PHP非常陌生,我只希望得到建设性的评论。你可能会问我是否使用mysql连接,也许会解释为什么它不好,也许会链接到最佳实践?
$sql = $db->prepare('UPDATE exhibitors SET first_name = :first_name WHERE id = :id');
$sql->execute(array('first_name' => $first_name,'id' => 52));
$db->query("UPDATE exhibitors SET first_name = '$first_name' WHERE id = 52");