Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我的代码mysql、PDO prepare delete语句有什么问题?_Php_Mysql_Pdo_Prepared Statement - Fatal编程技术网

Php 我的代码mysql、PDO prepare delete语句有什么问题?

Php 我的代码mysql、PDO prepare delete语句有什么问题?,php,mysql,pdo,prepared-statement,Php,Mysql,Pdo,Prepared Statement,为什么我的代码不起作用。救命啊,我看没什么错。如果我使用user\u id=$current\u user而不是user\u id=:current\u id,它就可以工作。但出于安全考虑,我需要做好准备。请帮忙 <?php $hostname = 'localhost'; $username = '**'; $password = '**'; $dbname = '**'; try { $db = new PDO("mysql:host=$hostname;dbname=$dbn

为什么我的代码不起作用。救命啊,我看没什么错。如果我使用user\u id=$current\u user而不是user\u id=:current\u id,它就可以工作。但出于安全考虑,我需要做好准备。请帮忙

<?php
$hostname = 'localhost';
$username = '**';
$password = '**';
$dbname = '**';
try {
    $db = new PDO("mysql:host=$hostname;dbname=$dbname", "$username" ,"$password" , 
        array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

} catch (PDOException $e) {
    echo" There was an error with the connection";
}

$current_user=$_POST['users_id'];//get user id

include 'db_tag.php';
$stmt=$db->prepare("DELETE FROM object_sign WHERE user_id=:current_id");

$stmt->bindParam(":current_id",$current_user,PDO::PARAM_INT);
$stmt->execute(); 

?>

@conan,使用下面我提到的代码&你需要用这些代码检查下面的几点

1)打印$current\u用户id以确保id是否正确显示,并且我已经设置了条件,如果post包含用户id,则只执行查询

2)我设置了异常,所以您可以通过异常消息检查错误

<?php
include 'db_tag.php';

$hostname = 'localhost';
$username = '**';
$password = '**';
$dbname = '**';

try {
     $db = new PDO("mysql:host=$hostname;dbname=$dbname", "$username" ,"$password" , 
        array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

    if(isset($_POST['users_id'])) {
        $current_user=$_POST['users_id'];//get user id

        $stmt=$db->prepare("DELETE FROM object_sign WHERE user_id=:user_id");

        $stmt->bindParam(":user_id",$current_user);
        $stmt->execute(); 
    } 
} catch(PDOException $e) {
    echo "Error: " . $e->getMessage();
}
?>

当前用户是整数还是字符串。如果字符串为PDO::PARAM_STR,请尝试使用PDO::PARAM_INT

$stmt->bindParam(":current_id",$current_user,PDO::PARAM_STR);
$stmt->execute();
如果仍然不起作用,试试这个

//$stmt->bindParam(":current_id",$current_user,PDO::PARAM_STR);
$stmt->execute(array(:current_id"=>$current_user));

你得到了什么错误?在firebug中,它说NetworkError:500内部服务器错误在响应中检查/预览错误尝试从PDO中删除
PDO::ATTR\u EMULATE\u PREPARES=>false
constructor@conan,您可以查看我的答案并让我知道您的反馈,以便我可以帮助您解决问题。在我使用您的异常消息后,错误:SQLSTATE[HY093]:无效参数编号:未定义参数,但$current_user=$\u POST['users_id'];没问题,我测试了echo$当前用户,很好。那么为什么在我的例子中没有定义参数呢。嗯,我的表包含多个相同的用户id,这会导致问题吗?但是如果我使用user\u id=$current\u user,那么我就可以删除它。那么,在我的情况下,我做错了什么?@conan,我已经编辑了我的答案并更改了参数,所以现在请再次检查上面的代码,如果还有任何问题,请告诉我。非常感谢!这是名字,名字必须匹配。用户id必须匹配:用户id非常感谢!你的第二条路也行。您的第一个方法是,PHP Weblineindia解决问题,我需要的名称与我需要绑定的名称匹配。所以user\u id必须匹配:user\u id,不能是:current\u id,谢谢您的时间。