-3

我在我的 Mac 上使用了一些名为“Minco”的时间跟踪软件,它有一个功能,可以将软件记录的所有时间发送到 PHP 脚本以添加到 MySQL 数据库中。我有这个工作正常,使用 POST 方法将数据从软件发送到脚本,脚本将 POST 变量提交到数据库,即:

$sql = "INSERT INTO $table_name VALUES('','$_POST[title]', '$_POST[date]', '$_POST[start]', '$_POST[end]', '$_POST[minutes]', '$_POST[amount]', '$_POST[notes]', '$_POST[uid]', '$_POST[type]', '$_POST[hash]')";

但是,当我将软件设置为包含“金额”变量时,我遇到了一个问题。这个变量包含一个英镑(Sterling)符号,当包含它时,它会中断所有其他变量到数据库的提交,即添加了一个新行,但所有列都没有输入任何内容。

我假设该问题与井号的编码/解码有关,但我不确定如何解决此问题。有人可以建议我怎么做吗?

4

4 回答 4

2

请使用列列表和准备好的语句。

如果目标列不需要 HTML 字符,那么您应该在发送之前将其剥离。

<?php
$link = mysqli_connect('localhost', 'my_user', 'my_password', 'world');

/* check connection */
if (!$link) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$stmt = mysqli_prepare($link, "INSERT INTO $tableName (col1, col2, col3, col4) VALUES (?, ?, ?, ?)");
mysqli_stmt_bind_param($stmt, 'ssss', $_POST[title], $_POST[date], $_POST[start], $_POST[end]);

/* execute prepared statement */
mysqli_stmt_execute($stmt);

printf("%d Row inserted.\n", mysqli_stmt_affected_rows($stmt));

/* close statement and connection */
mysqli_stmt_close($stmt);

/* close connection */
mysqli_close($link);
?>
于 2013-02-09T19:26:27.407 回答
0

你可以用不同的方式处理它

  • 利用mysql(i)_real_escape_string($_POST[])
  • 或者

    $amount = $_POST[amount]';

    $amount = str_replace ('你的磅符号','',$amount) ;

$amount并在你的字符串中使用变量

  • 你也可以试试这个'\$_POST[amount]\'
于 2013-02-09T19:21:43.000 回答
0

可以尝试的东西很少。确实,当字符串用双引号括起来时,您可以将 $variables 直接包含在字符串中,但是当您插入数组变量时,您必须将其括花括号中:

$myvar = "{$_POST['myvar']}";

我个人只是连接你的字符串,这样你就可以使用 mysql_real_escape_string() 方法来转义进入 MySQL 的值。类似于以下内容:

$sql = "INSERT INTO $table_name 
        VALUES('',
               '" . mysql_real_escape_string($_POST["title"]) . "', 
               '" . mysql_real_escape_string($_POST["date"]) . "', 
               '" . mysql_real_escape_string($_POST["start"]) . "', 
               '" . mysql_real_escape_string($_POST["end"]) . "', 
               '" . mysql_real_escape_string($_POST["minutes"]) . "', 
               '" . mysql_real_escape_string($_POST["amount"]) . "', 
               '" . mysql_real_escape_string($_POST["notes"]) . "', 
               '" . mysql_real_escape_string($_POST["uid"]) . "', 
               '" . mysql_real_escape_string($_POST["type"]) . "', 
               '" . mysql_real_escape_string($_POST["hash"]) . "')";
于 2013-02-09T19:26:11.063 回答
0

如果您的页面使用 ISO-8859-1 编码,但您的数据库使用 UTF-8 编码,那么您将尝试将井号作为 0xA3 字节发送,数据库将拒绝该字节为无效的 UTF-8 序列。

使用 UTF-8 编码的页面的反向错误,但使用 ISO-8859-1 编码的数据库更难发现,因为数据库只会认为您发送的是 0xC20xA3 字节序列而不是 U+00A3 字符。

于 2013-02-09T20:36:08.100 回答