php插入数据库函数,然后在另一个函数中选择all错误

php插入数据库函数,然后在另一个函数中选择all错误,php,sql,pdo,Php,Sql,Pdo,我正在运行一个php脚本,该脚本将在一个函数中向数据库插入一条新记录,插入后,我希望使用第二个函数从同一个数据库中获取所有内容,但出现以下错误 致命错误:未捕获错误:在上调用成员函数prepare 在/www1/fe5/www.seansdesigns.co.uk/web/foodApp/test.php:33堆栈中为空 跟踪:0/www1/fe5/www.seansdesigns.co.uk/web/foodApp/test.php9: getData 1{main}被抛出 /第33行的www

我正在运行一个php脚本,该脚本将在一个函数中向数据库插入一条新记录,插入后,我希望使用第二个函数从同一个数据库中获取所有内容,但出现以下错误

致命错误:未捕获错误:在上调用成员函数prepare 在/www1/fe5/www.seansdesigns.co.uk/web/foodApp/test.php:33堆栈中为空 跟踪:0/www1/fe5/www.seansdesigns.co.uk/web/foodApp/test.php9: getData 1{main}被抛出 /第33行的www1/fe5/www.seansdesigns.co.uk/web/foodApp/test.php

如果我分别调用这两个函数,它就会工作,因此sql工作正常

<?php

$test = "update";

if ($test == "update"){
    insertWeight();
    getData();
}

function insertWeight(){
    require_once "connect.php";

    $username = 'sean14';
    $weight = '60';
    $date = '20-01-03';

    $sql = "INSERT INTO $username (date, weight) VALUES (:date, :weight)";
    $stmt = $pdo->prepare($sql);
    $stmt->bindParam(":weight", $weight);
    $stmt->bindParam(":date", $date);
    $stmt->execute();
    $stmt = null;
}

function getData(){
    require_once "connect.php";

    $username = 'sean14';

    $stmt = $pdo->prepare("SELECT * FROM $username");
    $stmt->execute();
    $stmt = null;
    $x = 0;
    while ($row = $stmt->fetch()){
        $x++;
        $items[$x] = $row;
    }
    echo json_encode ($items);
}
?>

我认为问题在于,在第二个函数中,require_once将看到您已经在第一个函数中包含了数据库连接代码,但是$pdo将超出范围,因为它是在第一个函数中声明的。将db connect放在主代码体中,并将$pdo传递到所需的每个函数中。

我认为问题在于,在第二个函数中,require\u once将看到您已经在第一个函数中包含数据库连接代码,但是$pdo将超出范围,因为它在第一个函数中声明。将db connect放在主代码体中,并将$pdo传递到所需的每个函数中。

$pdo在两个函数中似乎都未定义。connect.php的内容是什么?我猜它是在那里定义的

但是,由于您告诉PHP只需要一次,它将只包含在insertWeight函数中。当您请求在getData中再次包含它时,它不会被包含,因为它在前面已经被包含。这也解释了为什么一次只调用一个函数没有问题

因此,要么将其更改为just require,或者,在我看来更好的是,在脚本开始时只需要一次,然后更改该文件,以便可以从其他函数中调用一个函数,该函数将返回连接对象

e、 g

$pdo在两个函数中似乎都未定义。connect.php的内容是什么?我猜它是在那里定义的

但是,由于您告诉PHP只需要一次,它将只包含在insertWeight函数中。当您请求在getData中再次包含它时,它不会被包含,因为它在前面已经被包含。这也解释了为什么一次只调用一个函数没有问题

因此,要么将其更改为just require,或者,在我看来更好的是,在脚本开始时只需要一次,然后更改该文件,以便可以从其他函数中调用一个函数,该函数将返回连接对象

e、 g


在getData中,您将$stmt定义为null,然后尝试对其调用fetch函数。$pdo在包含的connection.php文件中定义。我还将$stmt移到了函数的底部,仍然是一样的。鉴于这两个函数将独立工作,这不应该是问题所在。在getData中,您将$stmt定义为null,然后尝试对其调用fetch函数。$pdo在包含的connection.php文件中定义。我还将$stmt移到了函数的底部,仍然是一样的。由于这两个功能都将独立工作,所以这不应该是问题。非常感谢,我曾将所需的_放在外部,但出现连接错误。没有意识到我必须将这个变量$pdo传递给每个function@Steve8428函数内部和外部的变量是分开的。我建议你读一读精彩的《谢谢你》,我曾经把所需的_放在外面,但是连接出错了。没有意识到我必须将这个变量$pdo传递给每个function@Steve8428函数内部和外部的变量是分开的。我建议你读一读
require_once "connect.php";

function insertWeight(){
  $pdo = getPDOConnection(); //getPDOConnection will be a function defined in connect.php which returns a ready-made connection object.
  //...etc