Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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删除语句未运行_Php_Mysql_Pdo_Delete Row - Fatal编程技术网

php mysql删除语句未运行

php mysql删除语句未运行,php,mysql,pdo,delete-row,Php,Mysql,Pdo,Delete Row,我的SQL语句在phpMyAdmin中工作,但当我使用PHP从我的网页运行它时,它什么也不做 我的代码如下,它总是返回true。我已经解决了这个问题,但主要问题是代码没有删除行 // Delete Area public function deleteArea($product_area_id){ $this->db->query(" DELETE FROM product_area WHERE product_area_id = :product

我的SQL语句在phpMyAdmin中工作,但当我使用PHP从我的网页运行它时,它什么也不做

我的代码如下,它总是返回true。我已经解决了这个问题,但主要问题是代码没有删除行

// Delete Area
public function deleteArea($product_area_id){
    $this->db->query("
    DELETE 
    FROM product_area 
    WHERE product_area_id = :product_area_id 
    LIMIT 1
    ");
    //bind
    $this->db->bind(':product_area_id', $product_area_id);
    //Execute
    if($this->db->execute()){
        return true;
    } else {
        return false;
    }
}
我的数据库类:

public function bind($param, $value, $type = null) {
    if (is_null ( $type )) {
        switch (true) {
            case is_int ( $value ) :
                $type = PDO::PARAM_INT;
                break;
            case is_bool ( $value ) :
                $type = PDO::PARAM_BOOL;
                break;
            case is_null ( $value ) :
                $type = PDO::PARAM_NULL;
                break;
            default :
                $type = PDO::PARAM_STR;
        }
    }
    $this->stmt->bindValue ( $param, $value, $type );
}

public function query($query) {
    $this->stmt = $this->dbh->prepare($query);
}

public function execute(){
    return $this->stmt->execute();
}

您正在将PDO与
mysql\uz
函数混合使用。它们不能互操作工作。你需要的是


对不起,我失礼了。我传入的值是$Product\u area\u id,我使用的值是$Product\u area\u id.god

op的评论引述(目前的最后一条评论):

主要问题是,它不会删除。即使sql 在phpmyadmin中直接测试时,状态是正确的。中学 问题是,它也会说是真的。即使它没有删除。 机智解决了第二个问题。主要问题仍然存在- 科德努布

TLDR://注意:PDO语句::执行。。。。成功时返回TRUE,失败时返回FALSE

这就是为什么它总是为你返回1。请参阅下面的2个文件,使用PDOStatement对象的
rowCount()
off进行更改,以测试这一点

你在评论中说主要问题仍然存在。在手工创建了一个数据库类之后,我使用下面的代码没有问题,因为您没有提供(您提到了一个)。注意try/catch块的使用

坦率地说,我们不知道您是否有任何异常,或者您如何处理它们,或者您是否激活了错误报告。假设pdo对象能够成功地返回
rowCount()
值,则以下内容应该能够通过任何测试

测试模式:

create table product_area
(   product_area_id int primary key,
    theName varchar(100) not null
);
--  blockA begin
truncate product_area;
insert product_area (product_area_id,theName) values
(1,'Houston zone B'),(2,'Houston zone BH'),(20,'Houston zone Z');
--  blockA end
<?php
//  myPDO_DB.php
//
error_reporting(E_ALL);
ini_set("display_errors", 1);
include "db_connect_info.php";  // brings in the "defines" .. Shoot for a secure o/s vault in this file.

class myPDO_DB { 
    // will grab the stub from http://culttt.com/2012/10/01/roll-your-own-pdo-php-class/
    //
    // and then build your class into it (because you did not provide it)
    //
    // and then further improve it with try/catch blocks that were lacking
    //

    private $host      = DB_HOST; // these were brought in with the include above. File not shown.
    private $user      = DB_USER;
    private $pass      = DB_PASS;
    private $dbname    = DB_NAME;

    private $dbh;
    public $stmt;   // was made public to get into rowCount(); .... change this for your needs
    private $error;

    public function __construct(){
        // Set DSN
        $dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
        // Set options
        $options = array(
            PDO::ATTR_ERRMODE       => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_EMULATE_PREPARES => false
        );

        // Create a new PDO instanace
        try{
            $this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
            echo "Connect Ok<br>";
        }
        catch(PDOException $e){
            $this->error = $e->getMessage();
        }
    }

    public function bind($param, $value, $type = null) {
        try {
            if (is_null ( $type )) {
                switch (true) {
                    case is_int ( $value ) :
                    $type = PDO::PARAM_INT;
                    break;
                case is_bool ( $value ) :
                    $type = PDO::PARAM_BOOL;
                    break;
                case is_null ( $value ) :
                    $type = PDO::PARAM_NULL;
                    break;
                default :
                    $type = PDO::PARAM_STR;
                }
            }
            $this->stmt->bindValue ( $param, $value, $type );
        }
        catch(PDOException $e){
            $this->error = $e->getMessage();
            throw $e;
        }
    }

    public function query($query) {
        try {
            $this->stmt = $this->dbh->prepare($query);
        }
        catch(PDOException $e){
            $this->error = $e->getMessage();
            throw $e;
        }
    }

    public function execute(){
        try {
            return $this->stmt->execute();
        }
        catch(PDOException $e){
            $this->error = $e->getMessage();
            throw $e;
        }
    }
} 
测试文件:

create table product_area
(   product_area_id int primary key,
    theName varchar(100) not null
);
--  blockA begin
truncate product_area;
insert product_area (product_area_id,theName) values
(1,'Houston zone B'),(2,'Houston zone BH'),(20,'Houston zone Z');
--  blockA end
<?php
//  myPDO_DB.php
//
error_reporting(E_ALL);
ini_set("display_errors", 1);
include "db_connect_info.php";  // brings in the "defines" .. Shoot for a secure o/s vault in this file.

class myPDO_DB { 
    // will grab the stub from http://culttt.com/2012/10/01/roll-your-own-pdo-php-class/
    //
    // and then build your class into it (because you did not provide it)
    //
    // and then further improve it with try/catch blocks that were lacking
    //

    private $host      = DB_HOST; // these were brought in with the include above. File not shown.
    private $user      = DB_USER;
    private $pass      = DB_PASS;
    private $dbname    = DB_NAME;

    private $dbh;
    public $stmt;   // was made public to get into rowCount(); .... change this for your needs
    private $error;

    public function __construct(){
        // Set DSN
        $dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
        // Set options
        $options = array(
            PDO::ATTR_ERRMODE       => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_EMULATE_PREPARES => false
        );

        // Create a new PDO instanace
        try{
            $this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
            echo "Connect Ok<br>";
        }
        catch(PDOException $e){
            $this->error = $e->getMessage();
        }
    }

    public function bind($param, $value, $type = null) {
        try {
            if (is_null ( $type )) {
                switch (true) {
                    case is_int ( $value ) :
                    $type = PDO::PARAM_INT;
                    break;
                case is_bool ( $value ) :
                    $type = PDO::PARAM_BOOL;
                    break;
                case is_null ( $value ) :
                    $type = PDO::PARAM_NULL;
                    break;
                default :
                    $type = PDO::PARAM_STR;
                }
            }
            $this->stmt->bindValue ( $param, $value, $type );
        }
        catch(PDOException $e){
            $this->error = $e->getMessage();
            throw $e;
        }
    }

    public function query($query) {
        try {
            $this->stmt = $this->dbh->prepare($query);
        }
        catch(PDOException $e){
            $this->error = $e->getMessage();
            throw $e;
        }
    }

    public function execute(){
        try {
            return $this->stmt->execute();
        }
        catch(PDOException $e){
            $this->error = $e->getMessage();
            throw $e;
        }
    }
} 
对于测试文件,在“Mini test area”部分的顶部附近只有几行代码用于测试


数据库类:

create table product_area
(   product_area_id int primary key,
    theName varchar(100) not null
);
--  blockA begin
truncate product_area;
insert product_area (product_area_id,theName) values
(1,'Houston zone B'),(2,'Houston zone BH'),(20,'Houston zone Z');
--  blockA end
<?php
//  myPDO_DB.php
//
error_reporting(E_ALL);
ini_set("display_errors", 1);
include "db_connect_info.php";  // brings in the "defines" .. Shoot for a secure o/s vault in this file.

class myPDO_DB { 
    // will grab the stub from http://culttt.com/2012/10/01/roll-your-own-pdo-php-class/
    //
    // and then build your class into it (because you did not provide it)
    //
    // and then further improve it with try/catch blocks that were lacking
    //

    private $host      = DB_HOST; // these were brought in with the include above. File not shown.
    private $user      = DB_USER;
    private $pass      = DB_PASS;
    private $dbname    = DB_NAME;

    private $dbh;
    public $stmt;   // was made public to get into rowCount(); .... change this for your needs
    private $error;

    public function __construct(){
        // Set DSN
        $dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
        // Set options
        $options = array(
            PDO::ATTR_ERRMODE       => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_EMULATE_PREPARES => false
        );

        // Create a new PDO instanace
        try{
            $this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
            echo "Connect Ok<br>";
        }
        catch(PDOException $e){
            $this->error = $e->getMessage();
        }
    }

    public function bind($param, $value, $type = null) {
        try {
            if (is_null ( $type )) {
                switch (true) {
                    case is_int ( $value ) :
                    $type = PDO::PARAM_INT;
                    break;
                case is_bool ( $value ) :
                    $type = PDO::PARAM_BOOL;
                    break;
                case is_null ( $value ) :
                    $type = PDO::PARAM_NULL;
                    break;
                default :
                    $type = PDO::PARAM_STR;
                }
            }
            $this->stmt->bindValue ( $param, $value, $type );
        }
        catch(PDOException $e){
            $this->error = $e->getMessage();
            throw $e;
        }
    }

    public function query($query) {
        try {
            $this->stmt = $this->dbh->prepare($query);
        }
        catch(PDOException $e){
            $this->error = $e->getMessage();
            throw $e;
        }
    }

    public function execute(){
        try {
            return $this->stmt->execute();
        }
        catch(PDOException $e){
            $this->error = $e->getMessage();
            throw $e;
        }
    }
} 

你在这里混API抱歉我还在学习。混合API意味着什么。嘿@Fred ii-,好久不见了:D(但问题似乎仍在继续)。对于op来说,返回
true
false
并没有多大帮助,您应该查找一些对您有实际帮助的输出。
query
在我所知道的每个API中都不适用于
bind
execute
。嘿@FirstOne是的,已经有一段时间了。希望你一切顺利。嗨,Machavity,现在它正确地认识到删除不起作用,但为什么删除状态不起作用。因为如果我将SQL粘贴到phpmyadmin中,将:product\u area\u id更改为一个数字。它将删除该行。它不应该是
$this->statement->rowCount()
?没有
PDO::rowCount()
方法。很抱歉造成混淆。db是我添加的一个变量。所以$this->db->rowCount()与$this->stmt->rowCount()相同;还要注意的是,如果您要删除的id是主键(我只是将一些东西拼凑在一起),则不需要您的
限制1