怎么可能做这样的事


How would it be possible to do something like this?

我试图把这些放在一个单独的文件,将包括在每个页面

$sql = 'select id, name, age, address, pincode from json where name = :name';
$arr = array(":name" => $name);
// There are some 30 diff sql's and arrays

另一个页面

$name = 'peter';
$conn = connect();
function myType(){
global $conn;
global $sql; 
global $arr; 
$stmt = $conn->prepare($sql);
$stmt->execute($arr);
while( $row = $stmt->fetch(PDO::FETCH_ASSOC) ) {
      foreach ($row as $value) {
      echo $value.' <br>';
      }
   }
}
myType();

我试图保持sql和数组在一个单独的文件,并在需要时使用它们。保持物品清洁,易于维护。但是变量是稍后声明的,这给了我:Notice: Undefined variable: name in C:'web'apache'htdocs'dev'json.php on line 24

你能找到一种既不难看又能做到这一点的方法吗?

你应该使用两个文件

  1. sql.php
  2. fetch.php

然后在fetch。php中使用require_once 'sql.php'

下面是fetch.php的代码:
$name = 'peter';
$conn = connect();
require_once 'sql.php';
function myType(){
global $conn;
global $sql; 
global $arr; 
$stmt = $conn->prepare($sql);
$stmt->execute($arr);
while( $row = $stmt->fetch(PDO::FETCH_ASSOC) ) {
      foreach ($row as $value) {
      echo $value.' <br>';
      }
   }
}
myType();

sql。php

$sql = 'select id, name, age, address, pincode from json where name = :name';
$arr = array(":name" => $name);

这应该是有帮助的,您可以随时使用sql.php

将查询和绑定的参数存储在单独的include中有点奇怪。在include之后如何更改绑定参数?

我的建议是创建一个模型来处理数据库操作。这样做的好处是你可以封装数据库工作,使其与应用程序逻辑分离,并且可以轻松地在整个过程中重用它。

基本例子:

class CustomersModel
{
    protected $db;
    public function __construct($db)
    {
        $this->db = $db;
    }
    public function getByName($name)
    {
        $result = array();
        $sql = 'select id, name, age, address, pincode from json where name = :name';
        if($stmt = $conn->prepare($sql))
        {
            $stmt->execute(array(":name" => $name));
            $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
        }
        return $result;
    }
}

用法:

require_once('/path/to/CustomerModel.php');
$conn = connect();
$model = new CustomerModel($conn);
$customers = $model->getByName('peter');
foreach($customers as $c)
{
    echo htmlspecialchars($c['name']) . '<br />;
}