Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用PHP/PDO从表中获取数据_Php_Mysql_Pdo - Fatal编程技术网

无法使用PHP/PDO从表中获取数据

无法使用PHP/PDO从表中获取数据,php,mysql,pdo,Php,Mysql,Pdo,我试图从我的表中检索数据只是因为某种原因,我收到一个语法错误 有人能看出我哪里出了问题吗 $cid = $_GET['id']; $username = 'liam'; $password =''; try { $conn = new PDO('mysql:host=localhost;dbname=', $username, $password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_E

我试图从我的表中检索数据只是因为某种原因,我收到一个语法错误

有人能看出我哪里出了问题吗

    $cid = $_GET['id']; 

    $username = 'liam';
    $password ='';  

try {
$conn = new PDO('mysql:host=localhost;dbname=', $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$data = $conn->query('SELECT * FROM directory WHERE ID = :cid');
$data->bindValue(":cid", $cid);

foreach($data as $row) {


    print_r($row). '<br />';
}
您必须在查询数据库之前绑定变量


看看手册上的示例,您正在运行查询,而不是准备查询

改变

$conn->query

query()
只是按原样运行给定的查询
prepare()
将准备好的语句发送到数据库,然后可以使用绑定参数运行该语句

我还看到您在PDO中使用MySQL驱动程序。使用MySQL时,您必须禁用模拟的准备语句:

$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
有关更多信息,请参阅:

尝试使用以下方法:

$data = $conn->prepare('SELECT * FROM directory WHERE ID = :cid');
$data->bindValue(":cid", $cid);

注意使用了
prepare()
而不是
query()
我在连接行中没有看到数据库名称,在脚本中也没有看到
use
子句

define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_CHARSET', 'UTF-8');
define('DB_DATABASE', 'database');
define('PDO_DSN', 'mysql:host=' . DB_SERVER . ';dbname=' . DB_DATABASE . ';charset=' .
DB_CHARSET);

try {

$db = new PDO(PDO_DSN, DB_USERNAME, DB_PASSWORD,array(PDO::MYSQL_ATTR_INIT_COMMAND 
=> "SET NAMES UTF8"));
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

/*** echo a message saying we have connected ***/

}
catch(PDOException $e)
{
echo $e->getMessage();
}
确保您的表中ID为大写字母

$data = $db->prepare('SELECT * FROM directory WHERE ID = :cid');
也许在这里我会使用bindParam而不是bindValue()

$data->bindValue(':cid',$cid);
$data->execute();
$result=$data->fetchAll();
foreach($结果为$行){
打印($row)。“
”; }
如果您能发布您收到的准确错误消息,这将非常有用。对不起,更新了我的问题。我认为您应该阅读@Liam,就像我说的,确保WHERE ID=:cid'不应该是WHERE ID=:cid'您似乎也没有在新PDO stm中命名数据库,如果他的表中的字段不是大写ID怎么办?只是想知道为什么它必须是大写的。@dbf,其中ID=1和ID=1之间有区别是的,区别是一个是大写的,另一个不是,我的问题是为什么这很重要。。
$data = $conn->prepare('SELECT * FROM directory WHERE ID = :cid');
$data->bindValue(":cid", $cid);
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_CHARSET', 'UTF-8');
define('DB_DATABASE', 'database');
define('PDO_DSN', 'mysql:host=' . DB_SERVER . ';dbname=' . DB_DATABASE . ';charset=' .
DB_CHARSET);

try {

$db = new PDO(PDO_DSN, DB_USERNAME, DB_PASSWORD,array(PDO::MYSQL_ATTR_INIT_COMMAND 
=> "SET NAMES UTF8"));
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

/*** echo a message saying we have connected ***/

}
catch(PDOException $e)
{
echo $e->getMessage();
}
$data = $db->prepare('SELECT * FROM directory WHERE ID = :cid');
$data->bindValue(':cid', $cid);
$data->execute();
$result = $data->fetchAll();

foreach($result as $row) {


print_r($row). '<br />';
}