2017-03-08 1 views
-4

Qu'est-ce que je fais mal? Je continue à recevoir ce message:PHP PDO PDOStatement-> execute()

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected' in C:\xampp\htdocs\eCommerce_arabic\admin\index.php:16 Stack trace: #0 C:\xampp\htdocs\eCommerce_arabic\admin\index.php(16): PDOStatement->execute(Array) #1 {main} thrown in C:\xampp\htdocs\eCommerce_arabic\admin\index.php on line 16

<?php 
$dsn = "mysql:host-localhost;dbname=shop"; 
$user = 'root'; 
$pass =''; 
$option = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', 
); 
try { 
    $con = new PDO($dsn, $user, $pass, $option); 

    $con -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 


} 
catch (PDOException $e){ 
    echo 'failed to connect'. $e->getMessage(); 

} 

?> 
<?php 
//check if user coming from HTTP Post request 
if($_SERVER['REQUEST_METHOD'] == 'POST'){ 
    $username = $_POST['user']; 
    $password = $_POST['password']; 
    $hashedPass = sha1($password); 

$stmt = $con->prepare("SELECT username, password FROM users WHERE username=? AND password=?"); 
$stmt->execute(array($username, $password)); 

} 

?> 
+2

Typo: 'hôte localhost' doit être' host = localhost'. – Barmar

+0

Je vous suggère d'ajouter 'PDO :: ATTR_ERRMODE => PDO :: ERRMODE_EXCEPTION' au tableau' $ option', donc vous obtiendrez une erreur signalée lorsque vous essayerez d'ouvrir la connexion. – Barmar

+0

Copie possible de http://stackoverflow.com/questions/18499054/php-pdo-unable-to-connect-invalid-catalog-name –

Répondre

-1

est ici une autre méthode pour vous assurer qu'il fonctionne correctement s.

define("SQLHOST", "127.0.0.1"); 
define("SQLUSER", "root"); 
define("SQLPASS", ""); 
define("SQLSGBD", "shop"); 
try { 
    $con = new PDO('mysql:host=' . SQLHOST . ';dbname=' . SQLSGBD . ';charset=UTF8', SQLUSER, SQLPASS); 
    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} catch (PDOException $e) { 
    var_dump('Connection failed: ' . $e->getMessage()); 
} 
$stmt = $con->prepare("SELECT username, password FROM users WHERE username=? AND password=?"); 

if (isset($_SERVER['REQUEST_METHOD'])) { 
    if ($_SERVER['REQUEST_METHOD'] === "POST") { 
     $stmt->bindParam(1, $_POST['user'], PDO::PARAM_STR); 
     $stmt->bindParam(1, $_POST['password'], PDO::PARAM_STR); 
     $stmt->execute(); 
     $obj = $stmt->fetchall(PDO::FETCH_ASSOC); 
    } 
} 
+0

Les suggestions sont bonnes (bien que cela puisse être plus approprié pour codereview.stackexchange.com), mais cela ne répond pas vraiment à la question de l'OP ... –

+0

son code ne peut pas être plus désordonné. juste essayer de montrer une bonne façon de le faire. comment voulez-vous host-localhost pour travailler dans son code .... – cpugourou

0

What am I doing wrong? I keep getting this message:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected'

La syntaxe de la connexion est incorrecte. Reportez-vous à la documentation PHP pour PDO_MYSQL DSN.

Example #1 Setting the connection character set to UTF-8 prior to PHP 5.3.6

<?php 
$dsn = 'mysql:host=localhost;dbname=testdb'; 

Mise à jour de la ligne attribuant la valeur à dsn $ - le séparateur entre le hôte et la valeur (c.-à-localhost) doit être un signe égal (c.-à-=), pas un trait d'union (c.-à- -).

Cette ligne:

$dsn = "mysql:host-localhost;dbname=shop"; 
//    ^

devient:

$dsn = "mysql:host=localhost;dbname=shop"; 
//    ^