Одна маленькая ошибка ... - PullRequest
1 голос
/ 02 августа 2011

Я пишу сокращение 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;


}



?>

Ответы [ 2 ]

3 голосов
/ 02 августа 2011

У вас есть ошибки в ваших запросах SQL - и вы должны использовать функцию mysql_error(), чтобы узнать больше об этих ошибках; -)


Тем не менее, в вашем случае вы используете следующий запрос:

SELECT COUNT('url_id') 
FROM 'mini_shortener' 
WHERE 'code'= '$code' 
LIMIT 1

Вы не должны использовать одинарные кавычки вокруг имен полей, но ставьте обратные метки: `
То же во втором запросе, кстати.


С MySQL:

  • Одинарные кавычки ' используются буквенные строки arround,
  • и Backticks ` являются именами arround.
1 голос
/ 02 августа 2011
SELECT COUNT('url_id') FROM 'mini_shortener' WHERE 'code' = ...

Вы не можете выбрать строковый литерал. Попробуйте использовать обратные тики вместо одинарных кавычек.

SELECT COUNT(`url_id`) FROM `mini_shortener` WHERE `code` = ...

Случаи, когда вы помещаете имена столбцов в одинарные кавычки, не являются синтаксическими ошибками, но они, вероятно, не соответствуют вашим намерениям. Например, 'code' = '$code' будет истинным только тогда, когда $ code является буквально строкой 'code'. Он не сравнивает код $ с содержимым столбца code.

Аналогично, вы должны использовать обратные галочки для имени таблицы в вашем операторе INSERT:

INSERT INTO `mini_shortener` VALUES('', '$url', '$code')

Для обзора:

Строка - это последовательность байтов или символов, заключенная в одинарные кавычки («» ») или двойные кавычки (« »»). Если включен режим SQL ANSI_QUOTES, строковые литералы могут заключаться в кавычки только в одинарных кавычках отмечает, потому что строка, заключенная в двойные кавычки, интерпретируется как идентификатор.

Символом кавычки идентификатора является обратный тик («` »). Если включен режим SQL ANSI_QUOTES, допустимо также заключать идентификаторы в двойные кавычки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...