我在解决一些简单的PHP代码以在MySQL表中插入记录时遇到了困难。
此代码直接输入WAMP可以正常工作:
INSERT INTO `users` (`userName`,`userEmail`) VALUES ('orange','orange@gmail.com')
此PHP代码不起作用:
<?php
$dbHost="localhost";
$dbName="project";
$dbUser="admin";
$dbPassword="abcd";
$dbh=new PDO("mysql:host=$dbHost;dbName=$dbName", $dbUser, $dbPassword);
print_r($dbh);
echo "</br>";
print_r($dbh->errorInfo());
$query=$dbh->prepare("INSERT INTO users (userName, userEmail) VALUES (?,?)");
echo "</br>";
print_r(var_dump($query->errorInfo()));
echo "</br>";
print_r($query->errorCode());
echo "</br>";
print_r($dbh->errorInfo());
$query->bindValue(1, 'apple');
echo "</br>";
print_r(var_dump($query->errorInfo()));
echo "</br>";
print_r($query->errorCode());
echo "</br>";
print_r($dbh->errorInfo());
$query->bindValue(2, 'apple@gmail.com');
echo "</br>";
print_r(var_dump($query->errorInfo()));
echo "</br>";
print_r($query->errorCode());
echo "</br>";
print_r($dbh->errorInfo());
$inserted=$query->execute(); //True if succesful, False if not.
echo "</br>";
print_r(var_dump($query->errorInfo()));
echo "</br>";
print_r($query->errorCode());
echo "</br>";
print_r($dbh->errorInfo());
echo "</br>";
if ($inserted){print_r("true");}else{print_r("false");};
?>
执行页面时得到的是以下打印输出:
PDO Object ( )
Array ( [0] => [1] => [2] => )
array(3) { [0]=> string(0) "" [1]=> NULL [2]=> NULL }
Array ( [0] => 00000 [1] => [2] => )
array(3) { [0]=> string(0) "" [1]=> NULL [2]=> NULL }
Array ( [0] => 00000 [1] => [2] => )
array(3) { [0]=> string(0) "" [1]=> NULL [2]=> NULL }
Array ( [0] => 00000 [1] => [2] => )
array(3) { [0]=> string(5) "3D000" [1]=> int(1046) [2]=> string(20) "No database selected" }
3D000
Array ( [0] => 00000 [1] => [2] => )
false
该记录未插入数据库中。我做错了什么?我不确定我应该在print_r中看到什么,我将它们作为响应者的帮助。
谢谢,
JDelage
已编辑 - 我在评论中添加了推荐的print_r。
以下是我在WAMP中看到的内容:
答案 0 :(得分:4)
错误消息似乎表明您已正确连接到数据库,但尚未选择项目数据库。
为了确保它正在尝试使用正确的DSN进行更正,我会尝试更改连接字符串以直接包含值,而不是变量,即:
'mysql:host=localhost;dbname=project'
这不应该有所作为,但值得检查。
如果这不起作用,并且由于您似乎能够连接到MySQL,解决方法可能是将数据库名称包含在查询中。因此,您上面的查询将成为:
$query=$dbh->prepare("INSERT INTO project.users (userName, userEmail) VALUES (?,?)");
答案 1 :(得分:1)
非常奇怪的问题,似乎您需要以小写字母输入dbname
才能正确连接到数据库。
所以它应该是:
mysql:host=$dbHost;dbname=$dbName