PDO致命错误更新

时间:2013-11-12 04:36:18

标签: php html mysql database pdo

我收到了这个错误,这让我摸不着头脑:

  

致命错误:未捕获的异常'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']; }

2 个答案:

答案 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]]])

相应地发送参数。发送dsnusernamepassword

来自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());

   }