3

我有一个 MySQL 数据库,其表 (opendpu) 有多个列,包括标题为“ECRNUM”和“PE_REQUIRED”的列。

我只是想通过指定一些值来测试这个更新语句。我收到此错误:

Array ( [0] => 42000 [1] => 1064 [2] => 您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以获取在 'DOE WHERE ECRNUM = 附近使用的正确语法81308' 在第 1 行)

对于我的一生,我无法弄清楚这里出了什么问题。任何人都可以帮忙吗?

<?php
  require ('config.php');
 $ecrno = '81308';
 $pe_required = 'JOHN DOE';

while (true) {
try {
    $db = new PDO($dsn, $uname, $pword);
    $db->exec( "SET CHARACTER SET utf8" );
    $db->setAttribute( PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC ); 
    $db->setAttribute( PDO::ATTR_PERSISTENT, true );
    break;
}
    catch (Exception $e) {
        $db = null;
        $counter++;
        if ($counter == $limit)
            throw $e;
    }
}

$stmt = $db->prepare("UPDATE opendpu SET PE_REQUIRED = $pe_required WHERE ECRNUM = $ecrno");
$stmt->execute() or die(print_r($stmt->errorInfo(), true));

  ?>

.

4

3 回答 3

3

+1 用于使用准备好的语句......但是(它是一个很大的 BUT):

你永远不应该使用准备好的语句,bind_param因为这会让你对 SQL 注入敞开大门,并否定准备好的语句的好处。

$stmt = $db->prepare("UPDATE opendpu SET PE_REQUIRED=? WHERE ECRNUM=?");
$stmt->bind_param('si', $pe_required, $ecrno);
$stmt->execute() or die(print_r($stmt->errorInfo(), true));
于 2013-11-13T05:38:46.427 回答
1

像这样改变你的语法[在变量周围加上引号]

$stmt = $db->prepare("UPDATE `opendpu` SET PE_REQUIRED = '$pe_required' WHERE ECRNUM = '$ecrno'");
于 2013-11-13T05:37:53.490 回答
0

请检查以下查询

$stmt = $db->prepare("UPDATE opendpu SET PE_REQUIRED = '.$pe_required.' WHERE ECRNUM = '.$ecrno.'");
于 2013-11-13T05:42:00.210 回答