SELECT * FROM 给出其他结果然后 SELECT 2010,2011 FROM
SELECT * FROM giving other result then SELECT 2010,2011 FROM
当我尝试从某些列中获取值并使用
SELECT 2010,2011 来自 blablatable
然后我只得到 table 名称(在浏览器中检查)。
当我使用 SELECT * FROM blablatable
然后我得到(当然是一切)但是年份列的内容显示正确(在浏览器中检查)。
现在同一 table 中的其他列显示正确,我使用此 php 脚本将数据放入 Livecode 中的数据网格中。除年列外,一切正常。然后数据网格给出错误。
我不明白为什么它给出 tables 而不是给出数据。
我已经在 Livecode 中使用了相同的调整后的脚本,并且工作正常。所以测试了一些东西,要么是 php 脚本,要么是数据库出了问题。
这些是我使用的 2 个 php 测试脚本的一部分:
_______First 只给出 table names__notgood___
的脚本
$hostname_connLivecode = "localhost";
$database_connLivecode = "blabla";
$username_connLivecode = "blabla";
$password_connLivecode = "blabla";
$connLivecode = mysql_pconnect($hostname_connLivecode, $username_connLivecode, $password_connLivecode) or trigger_error(mysql_error(),E_USER_ERROR);
//2. Perform database query
mysql_select_db($database_connLivecode, $connLivecode);
$query_rsUser = ("SELECT 2010,2011 FROM blabla_table ORDER BY id");
$rsUser = mysql_query($query_rsUser, $connLivecode) or die(mysql_error());
$row_rsUser = mysql_fetch_assoc($rsUser);
$totalRows_rsUser = mysql_num_rows($rsUser);
if ($totalRows_rsUser == 0) {
echo "no data found";
}
do {
echo $row_rsUser["id"]."\t".$row_rsUser["2010"]."\t".$row_rsUser["2011"]."\n";
} while ($row_rsUser = mysql_fetch_assoc($rsUser));
?>
____________Now 给出正确的脚本 info_____
$hostname_connLivecode = "localhost";
$database_connLivecode = "blabla";
$username_connLivecode = "blabla";
$password_connLivecode = "blabla";
$connLivecode = mysql_pconnect($hostname_connLivecode, $username_connLivecode, $password_connLivecode) or trigger_error(mysql_error(),E_USER_ERROR);
//2. Perform database query
mysql_select_db($database_connLivecode, $connLivecode);
$query_rsUser = ("SELECT * FROM blabla_table ORDER BY id");
$rsUser = mysql_query($query_rsUser, $connLivecode) or die(mysql_error());
$row_rsUser = mysql_fetch_assoc($rsUser);
$totalRows_rsUser = mysql_num_rows($rsUser);
if ($totalRows_rsUser == 0) {
echo "no data found";
}
do {
echo $row_rsUser["id"]."\t".$row_rsUser["2010"]."\t".$row_rsUser["2011"]."\n";
} while ($row_rsUser = mysql_fetch_assoc($rsUser));
?>
有谁知道为什么 SELECT * 可以正常工作?
我不能使用这个,我必须使用列名。
我们将不胜感激。
谢谢。
你的这部分代码SELECT 2010,2011
来自手册 http://dev.mysql.com/doc/refman/5.1/en/identifiers.html
"Identifiers may begin with a digit but unless quoted may not consist solely of digits."
用刻度标记这些列名称。
SELECT `2010`,`2011`
- 因为你没有post你的错误信息。
旁注:Copy/paste 来自这个答案。刻度线和常规引号看起来很像,但并不相同。
示例,将失败:
SELECT '2010','2011'
因为它们是常规的 '
引号并由 MySQL 翻译为文字字符串。
我看到很多问题,其中 OP 将使用答案中的代码,并使用常规引号而不是标记,而不是答案代码本身的 copying/pasting。
脚注:
您应该考虑使用 mysqli
with prepared statements, or PDO with prepared statements,它们更安全。
mysql_
函数现已弃用,并将从未来的 PHP 版本中删除。
参考文献:
- https://wiki.php.net/rfc/mysql_deprecation
- Why shouldn't I use mysql_* functions in PHP?
当我尝试从某些列中获取值并使用 SELECT 2010,2011 来自 blablatable 然后我只得到 table 名称(在浏览器中检查)。 当我使用 SELECT * FROM blablatable 然后我得到(当然是一切)但是年份列的内容显示正确(在浏览器中检查)。 现在同一 table 中的其他列显示正确,我使用此 php 脚本将数据放入 Livecode 中的数据网格中。除年列外,一切正常。然后数据网格给出错误。 我不明白为什么它给出 tables 而不是给出数据。 我已经在 Livecode 中使用了相同的调整后的脚本,并且工作正常。所以测试了一些东西,要么是 php 脚本,要么是数据库出了问题。
这些是我使用的 2 个 php 测试脚本的一部分: _______First 只给出 table names__notgood___
的脚本$hostname_connLivecode = "localhost";
$database_connLivecode = "blabla";
$username_connLivecode = "blabla";
$password_connLivecode = "blabla";
$connLivecode = mysql_pconnect($hostname_connLivecode, $username_connLivecode, $password_connLivecode) or trigger_error(mysql_error(),E_USER_ERROR);
//2. Perform database query
mysql_select_db($database_connLivecode, $connLivecode);
$query_rsUser = ("SELECT 2010,2011 FROM blabla_table ORDER BY id");
$rsUser = mysql_query($query_rsUser, $connLivecode) or die(mysql_error());
$row_rsUser = mysql_fetch_assoc($rsUser);
$totalRows_rsUser = mysql_num_rows($rsUser);
if ($totalRows_rsUser == 0) {
echo "no data found";
}
do {
echo $row_rsUser["id"]."\t".$row_rsUser["2010"]."\t".$row_rsUser["2011"]."\n";
} while ($row_rsUser = mysql_fetch_assoc($rsUser));
?>
____________Now 给出正确的脚本 info_____
$hostname_connLivecode = "localhost";
$database_connLivecode = "blabla";
$username_connLivecode = "blabla";
$password_connLivecode = "blabla";
$connLivecode = mysql_pconnect($hostname_connLivecode, $username_connLivecode, $password_connLivecode) or trigger_error(mysql_error(),E_USER_ERROR);
//2. Perform database query
mysql_select_db($database_connLivecode, $connLivecode);
$query_rsUser = ("SELECT * FROM blabla_table ORDER BY id");
$rsUser = mysql_query($query_rsUser, $connLivecode) or die(mysql_error());
$row_rsUser = mysql_fetch_assoc($rsUser);
$totalRows_rsUser = mysql_num_rows($rsUser);
if ($totalRows_rsUser == 0) {
echo "no data found";
}
do {
echo $row_rsUser["id"]."\t".$row_rsUser["2010"]."\t".$row_rsUser["2011"]."\n";
} while ($row_rsUser = mysql_fetch_assoc($rsUser));
?>
有谁知道为什么 SELECT * 可以正常工作? 我不能使用这个,我必须使用列名。
我们将不胜感激。
谢谢。
你的这部分代码SELECT 2010,2011
来自手册 http://dev.mysql.com/doc/refman/5.1/en/identifiers.html
"Identifiers may begin with a digit but unless quoted may not consist solely of digits."
用刻度标记这些列名称。
SELECT `2010`,`2011`
- 因为你没有post你的错误信息。
旁注:Copy/paste 来自这个答案。刻度线和常规引号看起来很像,但并不相同。
示例,将失败:
SELECT '2010','2011'
因为它们是常规的 '
引号并由 MySQL 翻译为文字字符串。
我看到很多问题,其中 OP 将使用答案中的代码,并使用常规引号而不是标记,而不是答案代码本身的 copying/pasting。
脚注:
您应该考虑使用 mysqli
with prepared statements, or PDO with prepared statements,它们更安全。
mysql_
函数现已弃用,并将从未来的 PHP 版本中删除。
参考文献:
- https://wiki.php.net/rfc/mysql_deprecation
- Why shouldn't I use mysql_* functions in PHP?