<?php
$username = '***';
$password = '***';
$database = '***';
$hostname = 'localhost';
$stock_symbol = '1301.T';
$dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
$stmt = "SELECT * FROM `price/volume` WHERE `stock_symbol`=:stock_symbol";
$stmt->bindParam(':stock_symbol', $stock_symbol, PDO::PARAM_STR);
$stmt->execute();
$result = $stmt->fetchALL(PDO::FETCH_ASSOC);
echo json_encode($result);
?>
我是一名初学者,并试图为我的网站创建一个简单的PHP API。以上是API代码。当我在浏览器上运行API时出现错误:
致命错误:未捕获错误:调用/ storage / ssd3 / 769 / /public_html/api.php:10中的字符串上的成员函数bindParam()堆栈跟踪:#storage {s} / ssd3 / 769 /第10行的public_html / api.php
发布于 2018-07-27 15:44:35
你应该prepare()
在绑定占位符之前调用。$dbh
包含数据库连接。
修改版
<?php
try {
$dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
$stmt = "SELECT * FROM `price/volume` WHERE `stock_symbol`=:stock_symbol";
$qryResult = $dbh->prepare($stmt);
$qryResult->bindParam(':stock_symbol', $stock_symbol, PDO::PARAM_STR);
$qryResult->execute();
$result = $qryResult->fetchALL(PDO::FETCH_ASSOC);
echo json_encode($result);
} catch (PDOException $pdoe) {
echo ($pdoe->getMessage());
exit;
}
发布于 2018-07-27 16:19:13
这一行:
$stmt = "SELECT * FROM `price/volume` WHERE `stock_symbol`=:stock_symbol";
将变量$stmt
设置为该SQL字符串。所以,$stmt
是一个字符串。你看到的错误是尝试在其上调用方法的结果。字符串不是PHP中的对象,就像它们在其他语言中一样,并且它们没有方法。因此,每当你尝试在任何字符串上调用任何方法时,你都会遇到类似的错误。
$str = "any string";
$try = $str->anyMethod();
// Fatal error: Uncaught Error: Call to a member function anyMethod() on string
你需要从该字符串创建一个预准备语句,而不是简单地将字符串分配给$stmt
。
$stmt = $dbh->prepare("SELECT * FROM `price/volume` WHERE `stock_symbol`=:stock_symbol");
PDO prepare
方法返回一个PDOStatement
对象,其中包含bindParam
https://stackoverflow.com/questions/-100001703
复制相似问题