php - 我应该如何重写这个方法以获取更多参数

标签 php mysql sql function parameters

我需要重写此方法以允许更多参数,以便执行像这样的更大查询

$thing= connecting::query('SELECT * FROM accounts WHERE thing1=:thingOne AND random!=: ran_dom AND thing2=:thingTwo AND thing3=:thingThree AND thing4=:thingFour AND thing5=:thingFive AND thing6=:thingSix',                   array(':thingOne'=>$thingOne,':ran_dom'=>$ran_dom,':thingTwo'=>$thingTwo,':thingThree'=>$thingThree,':thingFour'=>$thingFour,':thingFive'=>$thingFive,':thingSix'=>$thingSix));

现在该方法只需要两个数组,因此该语句不会产生错误,但不会返回任何内容。不过这个查询工作得很好。

$thing= connecting::query('SELECT * FROM accounts WHERE thing1=:thingOne AND random!=:ran_dom',                 array(':thingOne'=>$thingOne,':ran_dom'=>$ran_dom));

方法如下:

public static function query($query,$params = array())
    {


        $statement = self :: db()->prepare($query);
        $statement->execute($params);
        if(explode(' ',$query)[0] == 'SELECT')
        {
            $data = $statement->fetchAll();
            return $data;
        }

    }

我尝试像这样重写函数定义,但没有成功:

public static function queried($query,$params array(array(),array(),array(),array(),array(),array()))

最佳答案

您在函数中传递两个参数,一个是查询,另一个是数组。您可以在数组中添加多个元素。它不限于两个。我猜您可能遇到查询错误或传递参数的问题。因此,通过检查错误来调试它。

public static function query($query,$params = array())
{


    $statement = self :: db()->prepare($query);
    $statement->execute($params);
    if($statement->errorCode() === '00000'){
        if(explode(' ',$query)[0] == 'SELECT')
        {
            $data = $statement->fetchAll();
            return $data;
        }
    }
    else {
        $errorInfo = $statement->errorInfo();
        print_r($errorInfo);
        exit;
    }

}

完整示例

Class connecting{
    public static function query($query,$params = array())
    {


        $statement = self :: db()->prepare($query);
        $statement->execute($params);
        if($statement->errorCode() === '00000'){
            if(explode(' ',$query)[0] == 'SELECT')
            {
                $data = $statement->fetchAll();
                return $data;
            }
        }
        else {
            $errorInfo = $statement->errorInfo();
            print_r($errorInfo);
            exit;
        }

    }
    public static function db(){
        return $db = new PDO('mysql:host=localhost;dbname=test', 'root', '');
    }

}
$ran_dom = "R";
$thingOne = "A";
$thingTwo = "B";
$thingThree = "C";
$thingFour = "D";
$thingFive = "E";
$thingSix = "F";

$result = connecting::query('SELECT * FROM accounts WHERE thing1=:thingOne AND random!=:ran_dom AND thing2=:thingTwo AND thing3=:thingThree AND thing4=:thingFour AND thing5=:thingFive AND thing6=:thingSix',  array(':thingOne'=>$thingOne,':ran_dom'=>$ran_dom,':thingTwo'=>$thingTwo,':thingThree'=>$thingThree,':thingFour'=>$thingFour,':thingFive'=>$thingFive,':thingSix'=>$thingSix));
print_r($result);

表结构

    -- phpMyAdmin SQL Dump
-- version 4.7.0
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1
-- Generation Time: Jul 15, 2019 at 02:40 PM
-- Server version: 10.1.26-MariaDB
-- PHP Version: 7.1.8

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Database: `test`
--

-- --------------------------------------------------------

--
-- Table structure for table `accounts`
--

CREATE TABLE `accounts` (
  `thing1` varchar(100) NOT NULL,
  `random` varchar(100) NOT NULL,
  `thing2` varchar(100) NOT NULL,
  `thing3` varchar(100) NOT NULL,
  `thing4` varchar(100) NOT NULL,
  `thing5` varchar(100) NOT NULL,
  `thing6` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `accounts`
--

INSERT INTO `accounts` (`thing1`, `random`, `thing2`, `thing3`, `thing4`, `thing5`, `thing6`) VALUES
('A', 'G', 'B', 'C', 'D', 'E', 'F');
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

关于php - 我应该如何重写这个方法以获取更多参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57030161/

相关文章:

php - 在带有 PDO 的同一 mysql 语句中使用 'AND' 和 'OR'

php - SQL 查询语法错误,不能为负数?

c# - MySql 数据阅读器不检索行

php - 为什么我的 PHP 记录没有被插入

sql - 从 SQL 中的表中顺序读取值

php - WooCommerce 自定义运费最低所需小计以及税金计算

php - 帮助唯一地识别组合列

mysql - Oracle 在 for 循环中提交

mysql - pma_history创建错误

sql - Oracle Sql 月份名称长度不正确