警告:PDO :: exec()期望在(...)

时间:2017-05-26 14:08:33

标签: php pdo parameter-passing prepared-statement

if (isset($_POST["add_employee"]))
{
    $result = false;

    global $con; 

    $stmt = $con->prepare('INSERT INTO Employees(Name, Address, ZipCode, City)
                VALUE($full_name, $address, $zip_code, $city)');

    $stmt->bindParam($full_name, $_POST['full name']);
    $stmt->bindParam($address, $_POST['address']);
    $stmt->bindParam($zip_code, $_POST['zip_code']);
    $stmt->bindParam($city, $_POST['city']);

    $result = $con->exec($stmt);

大家好,

我自己一直在做一个项目。现在我坚持下去。我知道有关于它的类似问题,但我也没有成功地阅读它们。 在这种情况下,我总是有一个警告输出,它与第26行相关联。 我搜索了很多论坛以获得答案,为什么它不起作用以及应该在exec(?)中给出什么样的参数?显然,exec($ stmt)不起作用,它必须是一个字符串。

有些人说exe()应该被execute()取代,但它没有用。相反,有一个输出像"调用未定义的方法PDO :: execute()" (如果我使用$ con> ...而不是$ stmt-> ...)

如果你能帮助我并作一个简短的解释,我将不胜感激。

谢谢,祝你有愉快的一天:)

2 个答案:

答案 0 :(得分:2)

您执行语句,而不是连接(documentation)。所以你会这样做:

$stmt->bindParam($full_name, $_POST['full name']);
$stmt->bindParam($address, $_POST['address']);
$stmt->bindParam($zip_code, $_POST['zip_code']);
$stmt->bindParam($city, $_POST['city']);

$result = $stmt->execute();

PDO::exec适用于未准备好的查询,例如

$con->exec("DELETE FROM fruit WHERE colour = 'red'");

此外,您的查询将无法按您的方式工作,因为占位符不会扩展。如果占位符在变量中(例如$full_name = ':full_name'),则需要使用双引号:

$stmt = $con->prepare("INSERT INTO Employees(Name, Address, ZipCode, City)
            VALUE($full_name, $address, $zip_code, $city)");

否则,您需要实际占位符,如下所示:

$stmt = $con->prepare('INSERT INTO Employees(Name, Address, ZipCode, City)
            VALUE(:full_name, :address, :zip_code, :city)');
$stmt->bindParam(':full_name', $_POST['full name']);
$stmt->bindParam(':address', $_POST['address']);
$stmt->bindParam(':zip_code', $_POST['zip_code']);
$stmt->bindParam(':city', $_POST['city']);

答案 1 :(得分:0)

这里,适当的解决方案:

if (isset($_POST["add_employee"]))
{   
    try {

        $result = false;
        global $con;

        $sql = "INSERT INTO Employees(Name, Address, ZipCode, City) VALUE(:full_name, :address, :zip_code, :city)";

        $stmt = $con->prepare($sql);

        $stmt->bindParam(':full_name', $_POST["full name"], PDO::PARAM_STR);
        $stmt->bindParam(':address', $_POST["address"], PDO::PARAM_STR);
        $stmt->bindParam(':zip_code', $_POST["zip_code"], PDO::PARAM_INT);
        $stmt->bindParam(':city', $_POST["city"], PDO::PARAM_STR);

        $result = $stmt->execute();

    } catch (PDOException $result) { 
        if ($result === false ) {
            echo "Error adding new employee!<br>";
        }
        else {
            echo "New employee sucessfully inserted!<br>";
        }
    }   
}