相关疑难解决方法(0)

我的PDO声明不起作用

这是我的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)

php mysql pdo

37
推荐指数
1
解决办法
7740
查看次数

如何在PHP PDO中成功执行查询?

如何测试以查看以下查询是否成功执行?

$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 mysql pdo

18
推荐指数
3
解决办法
5万
查看次数

MySQL更新使用PDO和预处理语句不起作用

我的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 pdo

11
推荐指数
1
解决办法
1万
查看次数

要在MySQL数据库中插入的PHP PDO代码失败

我在解决一些简单的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 mysql pdo

8
推荐指数
1
解决办法
3624
查看次数

为什么PDO异常错误没有被捕获?

我有一个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 mysql error-handling pdo

7
推荐指数
1
解决办法
2万
查看次数

将PHP PDO查询编写为`dbName` .tableName`而不是`tableName` - 为什么?

我正在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=$dbNamedbname=$dbName解决了这个问题.

php mysql pdo

5
推荐指数
1
解决办法
1万
查看次数

PDO故障排除:执行预准备语句时未捕获错误

我使用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显示或捕获这些类型的数据库错误?

php mysql pdo try-catch

3
推荐指数
1
解决办法
1万
查看次数

在MySQL + 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)

php mysql pdo

3
推荐指数
1
解决办法
4447
查看次数

PDO中的虚假陈述

我正在尝试运行这个简单的查询:

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记录的列表.我不知道该怎么做才能认真对待.我开始拉头发用头撞墙(这不是比喻).我究竟做错了什么?

php pdo

1
推荐指数
1
解决办法
680
查看次数

为什么我的查询不执行?

我有一个查询得到这些变量(但从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"的表中.

php mysql sql pdo

0
推荐指数
1
解决办法
101
查看次数

关于数据库失败的PHP更新 - 没有错误

我正在尝试使用以下格式更新我的数据库条目:

<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)

php pdo

0
推荐指数
1
解决办法
102
查看次数

如何进行PHP PDO插入

我正在尝试使用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)

php mysql pdo

0
推荐指数
1
解决办法
104
查看次数

这个php更新代码有什么问题

我创建此代码来更新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)

php pdo

-2
推荐指数
1
解决办法
128
查看次数

标签 统计

pdo ×13

php ×13

mysql ×10

error-handling ×1

sql ×1

try-catch ×1