2010-08-13 30 views
1

我在我的LAMP服务器上遇到了一些SQL语法/转义变量的问题。php,MySQL和变量包含å,ä和ö转义问题

我想使用的命令如下:

$sql=mysql_query("INSERT INTO '$table' (FirstName, LastName, StartDate, TimeStroke, DueDate, Duration, Price, Retailer, Checksum) 
VALUES ('$_POST[firstname]','$_POST[lastname]','$_POST[startdate]','$_POST[timestroke]','$duedate','$_POST[duration]','$price','$_SESSION[name]','$random')"); 

的问题是,有时$表变量包含象,A型和O字符。 因此我需要在$ table周围放置''以确保它保持不变。但是这样做时收到错误:

"Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''tablename' (FirstName, LastName, StartDate, TimeStroke, DueDate, Duration, P' at line 1".

貌似由“逃避”产生了一个问题。 我试着用mysql_real_escape_string替换查询:

"$sql=sprintf("INSERT INTO '".mysql_real_escape_string($table)."' (FirstName, [...]" 

但那不帮我满意。 有没有办法保持变量中的数据完好无损,仍然能够运行查询?或者我必须接受å,ä,ö被禁止使用php/MySQL吗?

回答

2

这是做字符编码。退房http://www.sitepoint.com/blogs/2006/03/15/do-you-know-your-character-encodings/


header('Content-Type: text/html; charset=utf-8');

页面

的顶部也可以尝试插入之前做mysql_set_charset('utf8'); /从数据库读取。那么你应该把那调职到PHP文件的形式在以下方面:

<form action="/your-post-controller.php" method="post" accept-charset="utf-8"> 

通知的接收字符集=“utf-8 - 这是非常重要的,否则你的头会到PHP文件报告其LATIN1

它应该工作,然后

而且看看http://www.phpwact.org/php/i18n/charsets - 试图找到链接,绝对值得任何人感兴趣的是得到正确的编码字符读,看到Iñtërnâtiônàlizætiøn字符串测试您的PHP & MySQL表格

+0

谢谢!读它吧! – xeet 2010-08-13 15:54:33

+0

谢谢! NIce,但现在我正在从数据库中获取所有内容的奇怪字符。 现在,我必须转换数据库才能从表中获取信息,然后在表单中重用它? – xeet 2010-08-13 18:03:38

+0

表中的字符编码是什么?你能举出一些“奇怪的人物”的例子,他们应该是什么样的人。 – 2010-08-13 18:16:32

1

您将使用反引号(`)来围绕表名称。无关的字符编码:

$sql=mysql_query("INSERT INTO `$table` (FirstName, LastName, StartDate, TimeStroke, DueDate, Duration, Price, Retailer, Checksum) 
VALUES ('{$_POST['firstname']}','{$_POST['lastname']}','{$_POST['startdate']}','{$_POST['timestroke']}','$duedate','{$_POST['duration']}','$price','{$_SESSION['name']}','$random')"); 

几个方面的笔记这里:

答:你应该从未知源来在任何输入用户mysql_real_escape_string避免有人破坏与SQL数据库注射。 B:你应该使用'around数组联想索引,原因是这些都会抛出未定义的常量(或者某件事)错误。这将填补你的错误日志,并使你发现更多的关键错误有点难,如果你需要回去。

+0

感谢您的回复,但反引号并未解决问题。这与根本不使用刻度相同。 å,ä和ö全部扭曲并由一串奇怪的字符替代。 还有其他建议吗?同时我阅读了字符编码。 :) – xeet 2010-08-13 15:54:08

+0

反引号是您的查询问题的一部分。但是,是的,您需要将字符集更改为UTF8,这是我的猜测,因为它现在可能是拉丁文的一些版本。 – 2010-08-13 15:57:47

+0

插入双引号字符串时,不能在散列引用上使用单引号,除非用'{}'包围数组引用。右:'“$ _POST [firstname]”'。右:“{'$ _POST ['firstname']}”'。错误:'“$ _POST ['firstname']”'(解析错误:未预期的T_ENCAPSED_AND_WHITESPACE)。 – 2010-08-13 16:51:55

相关问题