我收到此错误
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 '(int) , (int)' at line 2
我在SO
上跟进了这个答案我得到base并限制为字符串,我想将它们转换为int。这是我的代码
$category = $_POST['category'];
$base= $_POST['base'];
$limit= $_POST['limit'];
$sql = "SELECT id, name, url
FROM OBJECTS where CATEGORY='$category' limit (int)$base , (int)$limit";
答案 0 :(得分:3)
你需要施展它。你现在正在做的是PHP演员。你必须在SQL语句中强制转换它。
$category = $_POST['category'];
$base= $_POST['base'];
$limit= $_POST['limit'];
$sql = "SELECT id, name, url
FROM OBJECTS where CATEGORY='$category' limit CAST($base AS UNSIGNED) , CAST($limit AS UNSIGNED)";
答案 1 :(得分:3)
使用像这样的演员,
$category = $_POST['category'];
$base= intval($_POST['base']);
$limit= intval($_POST['limit']);
//OR
/*
$base= (int)($_POST['base'];
$limit= (int)($_POST['limit'];
*/
$sql = "SELECT `id`, `name`, `url`
FROM `OBJECTS` where CATEGORY='$category' limit $base ,$limit";
答案 2 :(得分:2)
PHP变量插值不会在字符串中填充。
你需要这样做
$sql = "SELECT id, name, url FROM OBJECTS where CATEGORY='$category' limit ".(int)$base." , ".(int)$limit;
插值仅适用于变量(或以$开头的事物),例如访问类(在变量中),所以像这样的事情
echo "self::$STATIC";
会将$STATIC
视为变量。如果$ v = 1
"(int)$v" becomes "(int)1"
随后,MySql将(int)1
看作一个字符串并炸毁。
答案 3 :(得分:2)
MySql没有以PHP方式进行类型转换。所以(int)$base
语法错误。
首先输入类型,而不是查询地点:
$base = intval($base);
$limit = intval($limit);
$sql = "SELECT id, name, url FROM OBJECTS where CATEGORY = '{$category}' limit {$base}, {$limit}";
考虑使用预准备语句,而不是直接将变量放在查询中而不是转义它们。
答案 4 :(得分:1)
在php中使用intval ... ref.link http://php.net/manual/en/function.intval.php
$category = $_POST['category'];
$base= intval($_POST['base']);
$limit= intval($_POST['limit']);
$sql = "SELECT id, name, url
FROM OBJECTS where CATEGORY='$category' limit $base , $limit";