【发布时间】:2014-06-28 16:31:04
【问题描述】:
我的聊天使用长轮询从数据库获取消息(加载它们没有问题)。但我也有将消息插入数据库的脚本,但有时它不起作用......它只是没有插入行,但它说它已插入。
<?php
include_once "../conect.php";
$sprava = $_POST['sprava']; // received message
session_start();
echo $sprava;
$ja = $_SESSION['id'];
session_write_close();
$cas = time();
try {
$conn = new PDO($databaza, $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = "SELECT som FROM user WHERE id = :ja";
$stmt = $conn->prepare($query);
$stmt->bindValue(':ja', $ja, PDO::PARAM_STR);
if ($stmt->execute()) echo "works ";
}
catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$on = $row["som"];
echo $on;
if ($on == "") return 0;
try {
$conn = new PDO($databaza, $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = "INSERT INTO chat (cas,text,od,pre) VALUES (:cas, :text, :od, :pre)";
$stmt = $conn->prepare($query);
$stmt->bindValue(':cas', $cas, PDO::PARAM_STR);
$stmt->bindValue(':text', $sprava, PDO::PARAM_STR);
$stmt->bindValue(':od', $ja, PDO::PARAM_STR);
$stmt->bindValue(':pre', $on, PDO::PARAM_STR);
$stmt->execute();
$affected_rows = $stmt->rowCount();
if ($affected_rows == 1) echo " works";
}
catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();}
?>
我没有收到任何错误,并且输出仍处于应有的状态 例如
1 works 37 works
2 works 37 works
3 works 37 works
4 works 37 works
5 works 37 works
第一个数字是我输入的消息,第一个“works”表示加载了用户 ID,第二个 nuber 加载了 ID,最后一个“works”表示该消息已插入 DB,但有时没有(只是偶尔)。
但在数据库中,我只有行,例如
1
2
4
还有 3、5 不见了
【问题讨论】:
-
pdo 错误告诉你什么?
-
没有错误......它只是没有插入一些行
-
我认为您应该重写所有内容,因为我发现您的代码中存在许多缺陷。我会说你写的 70% 的代码都是糟糕的代码,这就是问题所在。我可以这么说,因为我已经使用 PDO 创建了一个聊天脚本,但是我无法理解您的编写方式