PHP PDO MySQL没有异常或错误

PHP PDO MySQL没有异常或错误,php,mysql,pdo,Php,Mysql,Pdo,我有以下使用PDO的脚本 $db = new PDO("mysql:host=$hostname;dbname=$database", $username, $password); $sql = "BEGIN;\n". "INSERT INTO exp_ws_gk_text (WGT_PRG_CODE, WGT_TEXT)\n". " VALUES('".$_POST['prg_code']."', ".$db

我有以下使用PDO的脚本

    $db = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);

    $sql    = "BEGIN;\n".
              "INSERT INTO exp_ws_gk_text (WGT_PRG_CODE, WGT_TEXT)\n".
              "    VALUES('".$_POST['prg_code']."', ".$db->quote($_POST['text']).");\n" .
              "SELECT @Lid:=LAST_INSERT_ID();\n" .
              "INSERT INTO exp_ws_gk_state (WGS_STATE, WGS_TYPE, WGS_WGT_RID)\n".
              "    VALUES('".$_POST['state']."', ".$_POST['type'].", @Lid);\n".
              "SELECT a.wgt_prg_code prg_code, b.wgs_state state, b.wgs_type type, a.wgt_rid id, a.wgt_text text\n".
              "    FROM exp_ws_gk_text a\n".
              "    JOIN exp_ws_gk_state b ON b.wgs_wgt_rid = a.wgt_rid\n".
              "    WHERE b.wgs_wgt_rid = @Lid ORDER BY a.wgt_prg_code;\n".
              "COMMIT;\n";

$fp = fopen("/var/tmp/save_gatekeeper.txt", "a");
fwrite($fp, "SQL:". $sql."\n");

    try {
        $res = $db->prepare($sql);
        $res->execute();
        $error = $db->errorInfo();

fwrite($fp, "ErrorInfo:".print_r($error, true)."\n\n");
fwrite($fp, "Row:      ".print_r($res->fetch(PDO::FETCH_ASSOC), true)."\n\n");
fwrite($fp, "Row2:     ".print_r($res->fetch(PDO::FETCH_LAZY),true)."\n\n");

    }
    catch (PDOException $e) {

fwrite($fp, "ExceptionInfo:".print_r($e, true)."\n\n");

    }    

fclose($fp);

    echo json_encode($res->fetch(PDO::FETCH_ASSOC););
这是日志生成的内容:

SQL:BEGIN;
INSERT INTO exp_ws_gk_text (WGT_PRG_CODE, WGT_TEXT)
    VALUES('EDS', '[h3]IMPORTANT INFORMATION[/h3][p]This is a test gatekeeper for [b]Eddie\'s[/b] Classroom Course[/p]');
SELECT @Lid:=LAST_INSERT_ID();
INSERT INTO exp_ws_gk_state (WGS_STATE, WGS_TYPE, WGS_WGT_RID)
    VALUES('AL', 1, @Lid);
SELECT a.wgt_prg_code prg_code, b.wgs_state state, b.wgs_type type, a.wgt_rid id, a.wgt_text text
    FROM exp_ws_gk_text a
    JOIN exp_ws_gk_state b ON b.wgs_wgt_rid = a.wgt_rid
    WHERE b.wgs_wgt_rid = @Lid ORDER BY a.wgt_prg_code;
COMMIT;

ErrorInfo:Array
(
    [0] => 00000
)


Row:      

Row2:     
我不知道为什么它没有报告任何类型的错误或异常。这是 我第一次使用PDO。我使用旧的mysql调用进行了转换

有人能帮忙吗


我期待最后一次选择的结果被发回,我得到的只是“false”

由于在多个查询中使用预处理语句,因此需要使用模拟预处理语句。指

否则,我相信您正在执行的唯一事情就是
BEGIN


在我个人看来,我认为将多个查询放在一个PDO语句中是不好的做法。您应该考虑使用一个和多个语句,它允许您更容易地找出哪一个查询会引起问题,如果出现错误,则回滚。

其次,您正在使用准备好的语句,但仍然没有保护自己免受SQL注入的影响。不要在prepare()中使用$\u POST。您应该在准备语句后绑定这些语句。

因为您将准备语句用于多个查询,所以需要使用模拟的准备语句。指

否则,我相信您正在执行的唯一事情就是
BEGIN


在我个人看来,我认为将多个查询放在一个PDO语句中是不好的做法。您应该考虑使用一个和多个语句,它允许您更容易地找出哪一个查询会引起问题,如果出现错误,则回滚。

其次,您正在使用准备好的语句,但仍然没有保护自己免受SQL注入的影响。不要在prepare()中使用$\u POST。您应该在准备语句后绑定这些语句。

因为您将准备语句用于多个查询,所以需要使用模拟的准备语句。指

否则,我相信您正在执行的唯一事情就是
BEGIN


在我个人看来,我认为将多个查询放在一个PDO语句中是不好的做法。您应该考虑使用一个和多个语句,它允许您更容易地找出哪一个查询会引起问题,如果出现错误,则回滚。

其次,您正在使用准备好的语句,但仍然没有保护自己免受SQL注入的影响。不要在prepare()中使用$\u POST。您应该在准备语句后绑定这些语句。

因为您将准备语句用于多个查询,所以需要使用模拟的准备语句。指

否则,我相信您正在执行的唯一事情就是
BEGIN


在我个人看来,我认为将多个查询放在一个PDO语句中是不好的做法。您应该考虑使用一个和多个语句,它允许您更容易地找出哪一个查询会引起问题,如果出现错误,则回滚。

其次,您正在使用准备好的语句,但仍然没有保护自己免受SQL注入的影响。不要在prepare()中使用$\u POST。您应该在准备好声明后绑定它们。

干杯,我们在聊天中解决了这个问题


你混合了多种类型的陈述。您需要将查询分为两个单独的查询;一个是使用
$res->query
插入
,然后验证响应,另一个是使用
$res->fetch()
$res->fetchAll()
干杯,我们在聊天中解决了这个问题


你混合了多种类型的陈述。您需要将查询分为两个单独的查询;一个是使用
$res->query
插入
,然后验证响应,另一个是使用
$res->fetch()
$res->fetchAll()
干杯,我们在聊天中解决了这个问题


你混合了多种类型的陈述。您需要将查询分为两个单独的查询;一个是使用
$res->query
插入
,然后验证响应,另一个是使用
$res->fetch()
$res->fetchAll()
干杯,我们在聊天中解决了这个问题


你混合了多种类型的陈述。您需要将查询分为两个单独的查询;一个使用
INSERT
$res->query
,然后验证响应,另一个使用
使用
$res->fetch()
$res->fetchAll()选择

这是您应该使用
fetchAll
的情况吗?不知道,因为这是第一次使用PDO。如果要拉入多个数据库行,您希望使用
fetchAll
而不是
fetch
。如果要返回单个特定行(通过唯一键或主键),请使用
fetch
。使用
fetchAll()
仅返回空数组。我知道那张唱片被插入了。哦,对不起。您正在执行插入操作,而不是选择操作。我应该多加注意。尝试
query
。这是您应该使用
fetchAll
的情况吗?不知道,因为这是第一次使用PDO。如果您要拉入多个数据库行,您希望使用
fetchAll
而不是
fetch
。如果要返回单个特定行(通过唯一键或主键),请使用
fetch
。使用
fetchAll()
仅返回空数组。我知道那张唱片被插入了。哦,对不起。您正在执行插入操作,而不是选择操作。我应该多加注意。尝试
query
。这是您应该使用
fetchAll
的情况吗?不知道,因为这是第一次使用PDO。如果您要拉入多个数据库行,您希望使用
fetchAll
而不是
fetch
。如果要返回单个sp,请使用
fetch
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);