mysqli:为插入和更新日期准备语句错误?

时间:2011-03-02 19:25:17

标签: php mysqli prepared-statement

我想使用预准备语句在mysqli中插入和更新数据,

以下是我的database课程,

class database extends mysqli
{
    ...

    # insert and update data
    public function query_stmt($sql,$types = null,$params = null)
    {
        # create a prepared statement
        $stmt = parent::prepare($sql);

        if($stmt)
        {
            # bind parameters dynamically for markers
            if($types&&$params)
            {
                $bind_names[] = $types;
                for ($i=0; $i<count($params);$i++) 
                {
                    $bind_name = 'bind' . $i;
                    $$bind_name = $params[$i];
                    $bind_names[] = &$$bind_name;
                }
                $return = call_user_func_array(array($stmt,'bind_param'),$bind_names);
            }

            # execute query 
            $result = $stmt->execute();

            if($result) return 'success!';
                else return 'failed!';

            # close statement
            $stmt->close();

        }

        else
        {
            return self::get_error();
        }
    }

    # display error
    public function get_error() 
    {
        if($this->errno || $this->error)
        {
            return sprintf("Error (%d): %s",$this->errno,$this->error);
        }
    }

    public function __destruct()
    {
        parent::close();
        //echo "Destructor Called";
    }
}

当我有这样的正确查询时,它可以正常工作,

$sql = "
    INSERT root_countries_cities_towns (
        tcc_names,
        cny_numberic,
        tcc_created
    )VALUES(
        ?,
        ?,
        NOW()
    )";

$mysqli->query_stmt($sql, 'ss',array('UK','004'));

但是我希望它在我有不正确的查询时返回一些内容,例如,

$sql = "
        INSERT root_countries_cities_townx (
            tcc_names,
            cny_numberic,
            tcc_created
        )VALUES(
            ?,
            ?,
            NOW()
        )";

root_countries_cities_townx的表格不存在。所以我希望query_stmt的方法将这种类型的错误消息返回给我的浏览器。但我的方法不行!为什么呢?

我试图测试它以返回一些默认词,无论它是否正常,但我的浏览器上什么都没有出现,

# execute query 
$result = $stmt->execute();

if($result) return 'success!';
else return 'failed!';

我应该在代码中添加或更改哪些内容,以便在可以正常时返回正消息,并在不正常时返回否定消息?

感谢。

1 个答案:

答案 0 :(得分:0)

您将返回错误消息,而不是回显它们。您必须修改数据库类以使用echo而不是返回,或执行

$ret_text = $mysqli->query_stmt(...);
echo $ret_text;