我的目标是将一些点数据插入MySQL数据库。我用一些虚拟数据填充数据库,它似乎工作。稍后,我想检索该数据并将其存储在PHP变量中,以便我可以发布数据的html表。
Point X Y P1 1 1 P2 4 2
注意:请不要讨厌"艺术"。
我使用以下查询字符串从MySQL数据库中检索数据。我在非基于点的数据中使用了这个代码并且没有问题,运行得很好。
$sql = "SELECT * FROM " . $this->tableName . " WHERE `OTHER` = '" . $Otherdata . "' AND `POSITION` = 'POINT(1,1)' LIMIT 0, 30 ";
$query = mysqli_query($connection, $sql) or trigger_error("Query Failed: " . mysql_error());
$row = mysqli_fetch_assoc($query);
//print_r($row);//This is empty, or null...which means my $sql line is wrong too...
$Index = 0;
while ($row = mysqli_fetch_array($query, MYSQL_ASSOC)) {
$this->PositionX[$Index] = $row['POSITION']; //Error must be HERE!
$this->PositionY[$Index] = $row['POSITION']; // How do I access .X() or [0] or whatever it
$this->OtherVariable[$Index] = $row['OTHER']; // is that points to the first element of Point?
$Index++;
}
长话短说,这不起作用。 $ row [' POSITION']不知道我想要X组件。 $ row也是null或空,这意味着我的$ sql必须是正确的。
问题1:
检查Point(x,y)是否等于MySQL中DB的某个点的正确方法是什么?
修改:找到答案Here。 ' POINT(1,1)'查询的一部分实际上应该是POINT(1,1),即没有' 字符。正确的行显示:
$sql = "SELECT * FROM " . $this->tableName . " WHERE `OTHER` = '" . $Otherdata . "' AND `POSITION` = POINT(1,1) LIMIT 0, 30 ";
问题2:
从MySQL数据库中检索一段点数据并将其存储在PHP变量中的X和Y组件的语法是什么? (技术上两个php变量,一个用于X,一个用于Y,但你知道我的意思。)
另一种说法,我怎样才能调用echo $row['POSITION'];
(对于X和Y独立)?
答案 0 :(得分:3)
我最终使用了As
关键字。
"SELECT X(`POSITION`) as Xpos, Y(`POSITION`) as Ypos, `Other1`, `Other2`, `Other3`, `Other4` FROM " . $this->tableName . " WHERE `Other4` = '" . $Otherdata . ";
这让我只能访问Point的一个组件。
$myXpos = $row['Xpos'];
$myYpos = $row['Ypos'];
因此独立访问Point数据类型对象的X和Y组件。
答案 1 :(得分:2)
我最近一直在处理相同的问题,尽管上面的方法确实有效,但对于任何想要从二进制数据blob中提取坐标的人(例如,从“ fetch_assoc”接收的),那么此方法应该工作:
function rawPointToFloatPair($data)
{
$res = unpack("lSRID/CByteOrder/lTypeInfo/dX/dY", $data);
return [$res['X'],$res['Y']];
}
数据结构具有4个字节作为ID,后跟一个字节来定义字节顺序(0 =大字节序,1 =小字节序。为了简洁起见,此处未进行处理),然后是4个字节的“整数信息”(其中a值“ 1”表示这是一个点)。 接下来的16个字节是两个双精度浮点数。