我在我的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]')";
当我将软件设置为包含'amount'变量时,我遇到了一个问题。这个变量包含一个(英镑)符号,当包含它时,它会中断所有其他变量到数据库的提交,即添加一个新行,但所有列都没有输入。
我假设这个问题与井号的编码/解码有关,但我不知道如何解决这个问题。有人可以建议我怎么做吗?
答案 0 :(得分: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);
?>
答案 1 :(得分:0)
你可以用不同的方式处理它
mysql(i)_real_escape_string($_POST[])
和
$ amount = $ _POST [amount]';
$ amount = str_replace('你的POUND SIGN','',$ amount);
并在字符串中使用$amount
变量
'\$_POST[amount]\'
答案 2 :(得分:0)
很少有尝试。确实,当字符串用双引号括起来时,你可以直接在字符串中包含$变量,但是当你插入一个数组变量时,你必须将那个括在花括号中:
$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"]) . "')";
答案 3 :(得分:0)
如果您的页面使用的是ISO-8859-1编码,但您的数据库使用的是UTF-8编码,那么您将尝试将井号发送为0xA3字节,数据库将拒绝该字节作为无效的UTF-8序列。
使用UTF-8编码的页面的反向错误,但使用ISO-8859-1编码的数据库更难发现,因为数据库只会认为您发送的是0xC20xA3字节序列而不是U + 00A3字符。