将varchar转换为int时出现语法错误

时间:2016-06-28 05:36:33

标签: php

我收到此错误

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";

5 个答案:

答案 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";