我收到了这个错误,这让我摸不着头脑:
致命错误:未捕获的异常'PDOException',消息'无效 数据源名称'in /Users/aaronwilson/Desktop/testing_server/ATOM_CMS/functions/sandbox.php:10 堆栈跟踪:#0 /Users/aaronwilson/Desktop/testing_server/ATOM_CMS/functions/sandbox.php(10): PDO-> __ construct('SELECT title FR ...')#1 /Users/aaronwilson/Desktop/testing_server/ATOM_CMS/config/setup.php(30): get_title(NULL,'blog')#2 /Users/aaronwilson/Desktop/testing_server/ATOM_CMS/index.php(2): include('/ Users / aaronwil ...')#3 {main}引入 /Users/aaronwilson/Desktop/testing_server/ATOM_CMS/functions/sandbox.php 在第10行
这是sandbox.php代码:
<?php ## Sandbox PHP/PDO Functions
function get_page($dbc, $pg) {
$sql = new PDO("SELECT * FROM pages WHERE page = '$pg' AND status = 1 LIMIT 1");
$stmt = $dbc->prepare($sql);
$stmt->execute();
$row = $stmt->fetch();
echo '<h1>'.$page['title'].'</h1>';
echo '<div class="content">'.$page['body'].'</div>';}
function get_title($dbc, $pg)
$sql = new PDO("SELECT title FROM pages WHERE page = '$pg' AND status = 1 LIMIT 1");
$stmt = $dbc->prepare($sql);
$stmt->execute();
$row = $stmt->fetch();
return $page['title'];}
?>
在Setup.php上有一个S_GET函数来拉取url来调用sandbox.php上的函数:
if ($_GET ['page'] == '') {
$pg = 'home';}
else {
$pg = $_GET ['page']; }
答案 0 :(得分:0)
new PDO("SELECT * FROM pages WHERE page = '$pg' AND status = 1 LIMIT 1");
这不是你如何创建一个PDO对象,它的参数是不同的,它不接受查询。以下是构造函数原型。
public PDO :: __ construct()(string $ dsn [,string $ username [,string $ password [,array $ driver_options]]])
相应地发送参数。发送dsn
,username
,password
。
来自php.net的示例
<?php
/* Connect to an ODBC database using driver invocation */
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>
<强> Source 强>
答案 1 :(得分:-1)
您没有正确使用PDO库,这就是导致错误的原因。 以下是许多正确方法中的一个示例:(根据您的情况调整并确保它对您有所帮助)
$variable1 = "somthing";
$variable2 = "somewhat";
try
{
require_once("db-info.php");
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$db = new PDO('mysql:host='.$host.';dbname=' . $dbname, $dbuser, $dbpassword, $pdo_options);
$response = $db->prepare('SELECT column1, column2 FROM table WHERE column1 = :value1 and column2 = :value2');
$response->execute(array('value1' => $variable1,
'value2' => $variable2
));
$data = $response->fetch(); // works for one set of data
// if your are trying to fetch multiple line use a (while $data = $response->fetch())
//and insert your code inside the while loop.
//insert your code here....
//.........................
//.............
//using a return true or false may help you with your function case
$response->closeCursor();
}
catch (Exception $error)
{
die('error while selecting data' . $error->getMessage());
}