【问题标题】:php/mysql transactionphp/mysql 事务
【发布时间】:2011-05-12 19:37:23
【问题描述】:

我正在使用 PHP 和 MySQL 进行交易。使用 PHPMyAdmin 我将查询插入到我的大学数据库中,我应该在某些表中使用事务。到目前为止,我已经为我的员工交易制作了这段代码,但我的问题是如何获取插入到 addStaff.php 中的信息,以便我可以将其用作对此代码的查询?就在上面写着//values();

<?php
function begin() 
{
  mysql_query("BEGIN");
}
function commit()
{
  mysql_query("COMMIT");
}
function rollback()
{
  mysql_query("ROLLBACK");
}

mysql_connect("localhost","username", "password") or die(mysql_error());
mysql_select_db("test") or die(mysql_error());
$query = "INSERT INTO Staff (id,name,position,phone,email,roomNumber,dnumber)"
//values();

begin(); // BEGIN
$result = mysql_query($query);
if(!$result)
{
  rollback(); // ROLLBACK
  echo "You rolled back";
  exit;
}
else 
{
  commit(); // COMMIT
  echo "Transaction was succesful";
}
?>

【问题讨论】:

  • 请不要在你的代码之前使用那些前缀为@s 的东西,这会给你更好的错误描述。此外,您在dnumber) 之后错过了结束"
  • 插入到 addStaff.php 中的值是什么意思?你的意思是从提交的表格?如果是这样,请使用 $_POST['input_name]$_GET['input_name'],具体取决于表单的方法属性。
  • 只想说:确保您使用的是 INNODB MySQL 表。您不能在 MyISAM 表上进行实际事务,这些表有时在 phpmyadmin 上是默认的

标签: php mysql transactions insert phpmyadmin


【解决方案1】:

这也许就是你要找的东西:

$new_row = mysql_insert_id();
$query = mysql_query("SELECT * FROM `Staff` WHERE `id`=".$new_row);
$r = mysql_fetch_assoc($query);

echo $r['name'];

将回显插入的行名称。

编辑:这是一个非常基本的操作方法,在将任何东西转移到生产环境之前,您需要阅读 SQL 注入、准备语句/转义用户输入、XSS 攻击和许多SQL 查询安全的更重要部分

【讨论】:

  • 请注意,您需要使用htmlspecialchars 将输出正确编码到 HTML 页面(以防止 XSS)。
  • 我认为鉴于这个问题,OP 需要注意很多事情,并编辑了我的答案以反映这一点。
  • 很好的补充:安全应该从一开始就成为建筑物的一部分,而不是事后才想到。
【解决方案2】:

如果我理解你的问题是正确的,你需要知道如何提示输入数据、接受数据并将其插入数据库:

<?php
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {

       ... connect to the database ...

       $sometext = $_POST['textfield']; // retrieve the value from the form

       $qsometext = mysql_real_escape_string($sometext); // make it safe for the query

       $sql = "INSERT INTO mytable (textfield) VALUES ($qsometext);" // build the sql query

       $result = mysql_query($sql) or die(mysql_error()); // run the query

    }
?>

<html>

<body>
<form method="POST">
<input type="text" name="textfield"><input type="submit">
</form>

</body>

</html>

这是如何显示表单的准系统版本,然后将用户的数据插入数据库,只需重新显示表单以获取更多数据。

【讨论】:

  • 你不应该在$qsometext周围使用单引号吗?
猜你喜欢
  • 2012-10-28
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-27
相关资源
最近更新 更多