【问题标题】:Insert Into mysql using php使用php插入mysql
【发布时间】:2014-03-18 16:43:31
【问题描述】:

我是第一次使用 php 和 mysql。目标是有一个存储电子邮件地址的表,以形成一个通讯的邮件列表。我的表 Emails 有 2 列 ID(INT 自动递增)和电子邮件(varchar,255)

我可以连接到数据库,但我不能写入它。我认为我的问题在于我的 INSERT INTO 语句的语法。我看过很多例子,它们似乎专门围绕值使用了不同的语法。 表格代码:

    <form method="post" action="email.php" class="form-container">
    <div class="form-title"><h2>Sign up for my newsletter!</h2></div>
    <div class="form-title">Email Address</div>
    <input class="form-field" required="required" placeholder="example@mail.com" type="text" name="newEmail" /><br />
    <div class="submit-container">
    <input class="submit-button" type="submit" value="Submit" /></div>
  </form>

php代码:

    <?php
    $dbHost = "localhost";
    $dbUser = "input";
    $dbPass = "input";
    $dbName = "MailingList";


$conn= mysqli_connect ($dbHost, $dbUser, $dbPass, $dbName);

if(mysqli_connect_errno()) {
die("FAIL:". mysqli_connect_error() . "(" . mysqli_connect_errno() . ")");
}

$addEmail = "mysqli_real_escape_string($_POST['newEmail'])";

$query ="INSERT INTO Emails (email) VALUES ('$addEmail')"

mysqli_close($conn)
?>

【问题讨论】:

  • 鉴于以下答案,您还缺少一个结束分号 $query ="INSERT INTO Emails (email) VALUES ('$addEmail')" 您可以使用其中两个答案将所有内容拼凑在一起。
  • 感谢您的帮助!现在正在努力。

标签: php mysql sql forms mysqli


【解决方案1】:

您错过了将$conn 即数据库链接添加到mysqli_real_escape_string,并且您已将mysqli_real_escape_string() 包裹在" 中,因此它被视为string。所以删除" 并使用它。试试这个,

$addEmail = mysqli_real_escape_string($conn,$_POST['newEmail']);
                                 ......^
$query ="INSERT INTO Emails (email) VALUES ('$addEmail')";

而不是

$addEmail = "mysqli_real_escape_string($_POST['newEmail'])";

【讨论】:

  • 不客气,Krish。我注意到后删除了我的评论。
【解决方案2】:

您需要执行查询,而不仅仅是编写它。

$query ="INSERT INTO Emails (email) VALUES ('$addEmail')";
mysqli_query($conn, $query);

如果使用prepared statement,可以省去转义的麻烦:

$stmt = mysqli_prepare($conn, "INSERT INTO Emails (email) VALUES (?)");
mysqli_stmt_bind_param($stmt, "s", $_POST['newEmail']);
mysqli_stmt_execute($stmt);

如果您想要非程序样式(又名 oop),则如下所示

$stmt = $conn->prepare("INSERT INTO Emails (email) VALUES (?)");
$stmt->bind_param("s", $_POST['newEmail']);
$stmt->execute();

【讨论】:

  • 我编辑了我的代码,现在它正在创建记录,但实际上仍然没有将电子邮件写入记录。知道为什么吗?
  • 所以你有空行?正如我所说,您需要执行查询 - 然后一定要检查错误。
  • 只是为了在php中清楚这一行是您如何正确执行查询? mysqli_query($conn, $query);稍后我将不得不对此进行更多工作,但感谢您的回答。
【解决方案3】:

去掉转义函数周围的引号。这会将其转换为字符串,而不是实际转义值:

$addEmail = mysqli_real_escape_string($conn,$_POST['newEmail']);

【讨论】:

  • $addEmail = mysqli_real_escape_string($conn,$_POST['newEmail']); ;-) 因为它是mysqli_*
【解决方案4】:
$addEmail = mysqli_real_escape_string($conn,$_POST['newEmail']);

http://in2.php.net/mysqli_real_escape_string

string mysqli_real_escape_string (mysqli $link, string $escapestr)

【讨论】:

    猜你喜欢
    • 2014-02-25
    • 2016-07-11
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多