我正在写一个URL缩短器...我有一个错误,我似乎无法摆脱。我觉得它很明显,但我没有看到它。
(我是菜鸟;))这是错误:
'mysql_result(): supplied argument is not a valid MySQL result resource in <b>/home2/bythewa1/public_html/jbgc/func.inc.php</b> on line <b>23'
这是我在该页面上的代码。
<?php
include("db.inc.php");
function is_min($url)
{
return(preg_match("/jbgc\.me/i", $url)) ? true : false;
}
function gen_code()
{
$charset = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
return substr(str_shuffle($charset), 0, 6);
}
function exists($code) {
$code = mysql_real_escape_string($code);
$code_exists = mysql_query("SELECT COUNT('url_id') FROM 'mini_shortener' WHERE 'code'= '$code' LIMIT 1");
return (mysql_result($code_exists, 0) == 1) ? true : false;
}
function shorten($url, $code){
$url = mysql_real_escape_string($url);
$code = mysql_real_escape_string($code);
mysql_query("INSERT INTO 'mini_shortener' VALUES('', '$url', '$code')");
return $code;
}
?>
答案 0 :(得分:3)
您的SQL查询中存在错误 - 应使用mysql_error()
函数查找有关这些错误的更多信息; - )
在您的情况下,您仍在使用以下查询:
SELECT COUNT('url_id')
FROM 'mini_shortener'
WHERE 'code'= '$code'
LIMIT 1
你不应该在字段名称周围使用单引号 - 但是反写: `
在您的第二个查询中相同,顺便说一句。
使用MySQL:
'
是使用arround文字字符串,
`是使用循环名称。答案 1 :(得分:1)
SELECT COUNT('url_id') FROM 'mini_shortener' WHERE 'code' = ...
您无法从字符串文字中进行选择。尝试使用反向标记而不是单引号。
SELECT COUNT(`url_id`) FROM `mini_shortener` WHERE `code` = ...
将列名称放在单引号中的情况不是语法错误,但它们可能不会执行您的操作。例如,只有当$ code实际上是字符串'code'时,'code' = '$code'
才会成立。它不会将$ code与列code
的内容进行比较。
同样,您需要在INSERT语句中对表名使用反向标记:
INSERT INTO `mini_shortener` VALUES('', '$url', '$code')
供审核:
字符串是一个字节或字符序列,包含在单引号(“'”)或双引号(“”“)字符中。如果启用了ANSI_QUOTES SQL模式,则只能在单引号内引用字符串文字标记,因为在双引号内引用的字符串被解释为标识符。
标识符引号字符是反引号(“`”)。如果启用了ANSI_QUOTES SQL模式,则允许在双引号内引用标识符。