Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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 查询更新功能不工作_Php_Mysql - Fatal编程技术网

Php 查询更新功能不工作

Php 查询更新功能不工作,php,mysql,Php,Mysql,我正在使用CS50 2014中的以下功能,当我选择时,它工作,但当我尝试更新时,它不工作。以下是查询和函数: query( "UPDATE users SET pwtxt = ?, pass = ?, dt = ?, reset = ? WHERE usr = ?", NULL, "compass", NULL, 0, 1 ); function query(/* $sql [, ... ] */) {

我正在使用CS50 2014中的以下功能,当我选择时,它工作,但当我尝试更新时,它不工作。以下是查询和函数:

query(
    "UPDATE users 
         SET pwtxt = ?, pass = ?, dt = ?, reset = ?
         WHERE usr  = ?",
    NULL,
    "compass",
    NULL,
    0,
    1
);

function query(/* $sql [, ... ] */)
{

    // SQL statement
    $sql = func_get_arg(0); 

    // parameters, if any
    $parameters = array_slice(func_get_args(), 1);  

    // try to connect to database
    static $handle;
    if (!isset($handle))
    {
        try
        {
            // connect to database
            $handle = new PDO("mysql:dbname=" . DATABASE . ";host=" . SERVER, USERNAME, PASSWORD);

            // ensure that PDO::prepare returns false when passed invalid SQL
            $handle->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        }
        catch (Exception $e)
        {
            // trigger (big, orange) error
            trigger_error($e->getMessage(), E_USER_ERROR);
            exit;
        }
    }

    // prepare SQL statement
    $statement = $handle->prepare($sql);
    if ($statement === false)
    {
        // trigger (big, orange) error
        //  trigger_error($handle->errorInfo()[2], E_USER_ERROR);  need to fix array issue
        exit;
    }   

    // execute SQL statement
    $results = $statement->execute($parameters);


    // return result set's rows, if any
    if ($results !== false)
    {       
        return $statement->fetchAll(PDO::FETCH_ASSOC);
    }
    else
    {       
        return false;
    }
}

当您更新行时,您似乎无法再使用空值进行更新,无法使用fetch方法。这就是为什么它只处理Select查询

您必须使用rowCount方法来查看有多少受到查询的影响。顺便说一句,我认为在一种方法中尝试混合不同的查询类型不是一个好主意。select、update、insert或delete的返回值不同。你不能在同一个函数中求和


如果您想集中数据库连接,我邀请您创建一个PDO子类,您可以在其中硬编码DB凭据。或者您可以创建一个全局PDO对象,或者更好地使用单例。这样,您就可以在任何地方使用PDO实例,而无需复制您的DB凭据,也无需使用PDO本机方法进行准备

它仅在结果出现时使用fetch!=错。如果删除空值,更新将按写入方式工作