这是我的PHP sql语句,它在var转储时返回false
$password_md5 = md5($_GET['password']);
$sql = $dbh->prepare('INSERT INTO users(full_name, e_mail, username, password, password_plain) VALUES (:fullname, :email, :username, :password, :password_plain)');
$result = $sql->execute(array(
':fullname' => $_GET['fullname'],
':email' => $_GET['email'],
':username' => $_GET['username'],
':password' => $password_md5,
':password_plain' => $_GET['password']));
Run Code Online (Sandbox Code Playgroud) 如何测试以查看以下查询是否成功执行?
$STH = $this->_db->prepare("UPDATE UserCreds SET
VerificationString=:newVerificationString, ExpiryDate=:expiryDate
WHERE UserID = :userID;");
$STH->execute($params);
Run Code Online (Sandbox Code Playgroud)
我知道我可以lastInsertId()在添加新行时使用,但是UPDATE和SELECT呢?
我的php PDO和mysql有一个奇怪的问题.
我有下表:
create table test_table ( id integer, value text );
Run Code Online (Sandbox Code Playgroud)
单排:
insert into test_table values (1, "asdf");
Run Code Online (Sandbox Code Playgroud)
当我尝试使用预准备语句更新此单行时,根据我使用的语法,我得到了不同的行为:
// connection to db (common code)
$dbh = new PDO("mysql:host=localhost;dbname=test", "myuser", "mypass");
Run Code Online (Sandbox Code Playgroud)
================================================== =======
// WORKING
$q = 'update test_table set id=1, value='.rand(0,99999).' where id=1';
$dbh->exec($q);
Run Code Online (Sandbox Code Playgroud)
================================================== =======
// WORKING
$q = 'update test_table set value=:value where id=:id';
$par = array(
"id" => 1,
"value" => rand(0,99999)
);
$sth = $dbh->prepare($q, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute($par);
Run Code Online (Sandbox Code Playgroud)
================================================== =======
// NOT WORKING …Run Code Online (Sandbox Code Playgroud) 我在解决一些简单的PHP代码以在MySQL表中插入记录时遇到困难.
直接输入WAMP的代码工作正常:
INSERT INTO `users` (`userName`,`userEmail`) VALUES ('orange','orange@gmail.com')
Run Code Online (Sandbox Code Playgroud)
这个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");}; …Run Code Online (Sandbox Code Playgroud) 我有一个PHP脚本,在SQL查询的语句中有两个故意错字错误:
try
{
$stmt = $dbh->prepare("SELECT COUNT(*) FROM Product WHERE non-existent_column=?");
$stmt->blindValue(1, $id, PDO::PARAM_INT);
$stmt->execute();
$row = $stmt->fetchColumn();
}
catch(PDOException $err)
{
var_dump($err->getMessage());
var_dump($dbh->errorInfo());
}
Run Code Online (Sandbox Code Playgroud)
但是,即使将属性设置为,脚本也不会捕获错误PDO::ERRMODE_EXCEPTION.我在这里错过了什么?
更新:
这是完整的脚本.第二个错字blindValue已被退回.错误仍未解决:
<?php
$user= "user";
$password = "password";
$dsn = "mysql:dbname=Catalogue;host=localhost";
$dbh = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ERRMODE_EXCEPTION);
$id = 1000;
try
{
$stmt = $dbh->prepare("SELECT COUNT(*) FROM Product WHERE non-existent_column=?");
$stmt->bindValue(1, $id, PDO::PARAM_INT);
$stmt->execute();
$row = $stmt->fetchColumn();
}
catch(PDOException $err)
{
echo "caught";
var_dump($err->getMessage());
var_dump($dbh->errorInfo());
exit();
}
var_dump($stmt);
var_dump($row); …Run Code Online (Sandbox Code Playgroud) 我正在PHP PDO中编写一个用户注册函数,我发现只有在这样写的情况下我的查询才能正常运行:
<?php
$dbHost="localhost";
$dbName="project";
$dbUser="admin";
$dbPassword="abcd";
$dbh=new PDO("mysql:host=$dbHost;dbName=$dbName", $dbUser, $dbPassword);
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$query=$dbh->prepare("INSERT INTO project.users (userName, userEmail) VALUES (?,?)");
.....
Run Code Online (Sandbox Code Playgroud)
另一方面,如果我写,它将无法运行:
...
$query=$dbh->prepare("INSERT INTO users (userName, userEmail) VALUES (?,?)");
...
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我收到以下错误消息:
致命错误:未捕获异常'PDOException',消息'SQLSTATE [3D000]:无效的目录名称:1046未选择数据库'在C:\ wamp\www\Tests\Test03\Index.php:11堆栈跟踪:#0 C:\ wamp\www\Tests\Test03\Index.php(11):PDOStatement-> execute()#1 {main}在第11行的C:\ wamp\www\Tests\Test03\Index.php中抛出
为什么我需要精确project.users?为什么输入表名不够,因为db名称本身已经在PDO对象中了?
谢谢!
JDelage
更新 请参阅下面接受的答案.更换dbName=$dbName用dbname=$dbName解决了这个问题.
我使用PDO遇到了一个问题,因为没有发现错误.
代码很简单,工作得很好,我只需要包含一个样本以避免混淆:
$sql = 'INSERT INTO somedatetable (something)
VALUES (:something)
ON DUPLICATE KEY UPDATE something=:something';
$values = array(":something" => $something);
try {
$stmt = $dbh->prepare($sql);
$stmt->execute($values);
} catch (PDOException $e) {
echo "Error: " . $e->getMessage() . "<br />\n";
}
Run Code Online (Sandbox Code Playgroud)
代码工作正常,但是当处理新模块时,我遇到了一个问题,即没有添加或修改记录,也没有发现错误.
$stmt返回,false但我没有线索为什么或如何找到错误.
解决方案最后很简单,我使用的是一个对表没有写权限的有限MySQL用户.使用mysql时,这些错误总会立即显示,但是使用PDO我不知道如何找到它们.
如何让PHP/PDO显示或捕获这些类型的数据库错误?
我想知道如何在MySQL + PDO中获取警告计数.
在控制台中进行查询时,我发出警告,寻找varchar而不是添加aphostrophes(' ').
mysql> describe keywords;
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| document_id | int(11) | NO | MUL | NULL | |
| keyword | char(50) | NO | | NULL | |
| value | varchar(250) | YES | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
mysql> …Run Code Online (Sandbox Code Playgroud) 我正在尝试运行这个简单的查询:
try {
$dsn = "mysql:host=localhost;dbname:mydb";
$PDO = new PDO($dsn, 'root', '');
$statement = $PDO->query("SELECT * FROM posts");
var_dump($statement);
} catch (PDOException $e) { exit($e->getMessage()); }
Run Code Online (Sandbox Code Playgroud)
而这个输出:
bool(false)
Run Code Online (Sandbox Code Playgroud)
我真的生气了这个错误.我试图在我的数据库上运行查询.$PDO是一个PDO对象,因此从技术上讲它连接到数据库.似乎所有专业功能都没有出错.从$PDO->query()phpmyadmin 运行复制和粘贴的查询返回2记录的列表.我不知道该怎么做才能认真对待.我开始拉头发用头撞墙(这不是比喻).我究竟做错了什么?
我有一个查询得到这些变量(但从POST表单):
$username = "John";
$email = "johnsmith@mail.com";
$passwordEnc = "9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684";
$activated = 0;
$activationKey = "5753a498f025464d72e088a9d5d6e872592d5f91";
Run Code Online (Sandbox Code Playgroud)
查询如下:
$stmt = $dbu->prepare("INSERT INTO users (username, email, password, activated, key) VALUES (?, ?, ?, ?, ?)");
$stmt->execute(array($username, $email, $passwordEnc, $activated, $activationKey));
Run Code Online (Sandbox Code Playgroud)
没有错误,但该条目未添加到名为"users"的表中.
我正在尝试使用以下格式更新我的数据库条目:
<form method="post" action="inc/update.php">
<?php foreach ($links as $row) {
?>
<div class="btn_admin">
<p>
<label>Titulo</label>
<input type="text" name="title[]" value="<?php echo $row["desc"] ?>">
</p>
<p>
<label>Url</label>
<input type="text" name="url[]" value="<?php echo $row["url"] ?>">
<input type="hidden" name="id[]" value="<?php echo $row["id"] ?>" />
</p>
</div>
<?php }
?>
<input type="submit" name="submit" value="Update Links" />
</form>
Run Code Online (Sandbox Code Playgroud)
在我的update.php文件中:
if ($_SERVER["REQUEST_METHOD"] == "POST"
&& $_POST["submit"] == "Update Links") {
include_once 'db.php';
$db = new PDO(DB_INFO, DB_USER, DB_PASS);
foreach($_POST['id'] as $id ) {
$title=$_POST["title"][$id-1];
$url=$_POST["url"][$id-1];
$sql = …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用PDO插入数据库.
这是我的代码:
$SQLinsert = $odb->prepare("INSERT INTO `sites` VALUES(NULL, :site, :username)");
$SQLinsert -> execute(array(':site' => $site, ':username' => $user));
Run Code Online (Sandbox Code Playgroud)
我添加了PDO错误报告,我收到此错误:
Array ( [0] => 00000 [1] => [2] => )
Run Code Online (Sandbox Code Playgroud) 我创建此代码来更新mysql,它似乎没有工作.我尽了最大努力,但仍然没有用.它没有更新我的数据库.可能是什么问题呢?我的配置页面
<?php
define("dbuser", "XX");
define("dbpass", "XX");
define("dbhost", "localhost");
define("dbname", "smsplugin");
?>
$smsbal = $_POST['smsbal'];
$values =$_POST['values'];
$api = $_POST['api'];
$db = new PDO('mysql:host='.dbhost.';dbname='.dbname.';charset=utf8', dbuser, dbpass);
$sql="UPDATE user SET api=?,values=?,left=? WHERE id='1'";
$q=$db->prepare($sql);
$q->execute(array($api,$values,$smsbal));
<form method="POST" action="" class="well form-horizontal" style="width:338px;margin:0 auto;"><br />
<br />
<p>
<label for="api"><strong>API Setting</strong></label>
<input type="text" name="api" id="api" data-placement="right" data-html="true" data-animation="true"/>
</p>
<p>
<label for="values"><strong>API Values</strong></label>
<input type="text" name="values" id="values" title="These are the values that are passed to your SMS provider; <strong>Sender, Receiver and the Message</strong>. Depending …Run Code Online (Sandbox Code Playgroud)