0

我有一个 MySQL 数据库,它的一个表(theTable)上有这个定义

CREATE  TABLE `theDatabase`.`theTable` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `thecolumn` TEXT NOT NULL ,
  PRIMARY KEY (`id`) );

我正在用 PHP 尝试这个:

/*File executeSelect.php*/
mysql_connect("theServer","theUser","thePassword") or die(mysql_error());
mysql_select_db("theDatabase") or die (mysql_error());
$q = mysql_query($_REQUEST['query']);
while($e = mysql_fetch_assoc($q))
    $output[] = $e;
print(json_encode($output));
mysql_close();

如果我执行 a executeSelect.php?query=select * from theTable,则为该列显示的信息thecolumnNULL是否thecolumn有特殊字符。我thecolumn定义为text因为我需要在上面存储大文本(500~1000 个字母)。

例如, a executeSelect.php?query=select * from theTablewith id=1;thecolumn=asdfintheTable可以正常工作,但与id=1;thecolumn=ásdfin相同的 executeSelecttheTable给出NULLfor thecolumn

我尝试使用 MySQL 控制台执行相同的查询,它工作正常。我正在使用 Apache 2.4 和 PHP 5.3。

我在这里错过了什么,我的 php 代码没有text以正确的方式从 MySQL 的列中检索数据?

4

3 回答 3

0

代码不应该是:

while($e = mysql_fetch_assoc($q))
    $output[] = $e['thecolumn'];
print(json_encode($output));
mysql_close();

我不推荐这种方法,也推荐使用 PDO

于 2013-06-13T22:23:34.960 回答
0

我强烈建议不要这样做,因为这种方法很容易受到 SQL 注入攻击

于 2013-06-13T22:14:35.073 回答
0

2年后,让我感到困扰的是,这个问题没有解决我的问题的答案。

正如Mike W在问题的评论中指出的那样,问题在于 sql 客户端中的编码。

如果使用 MySQLi,可以使用PHP: mysqli::set_charset - Manual中描述的内容。

$mysqli->set_charset("utf8")在我的场景中,只需在打开连接后立即做一个简单的事情。

于 2016-07-27T07:21:45.403 回答