我有一个PHP7.3表单,要求用户输入名称、WKT和SRID。我想将WKT和SRID上传到SQL Server 2017,以便它在upload_WKT_测试中使用STGeomFromText创建一个几何对象:
<?php
if ($_SERVER['REQUEST_METHOD']=="POST") {
$wkt = $_POST['wkt'];
$srid = $_POST['srid'];
$name = $_POST['name'];
try {
$wktQuoted = $pdo->quote ($wkt);
//$wktQuoted = "'$wkt'";
$sql = "INSERT INTO Upload_WKT_Test (Name, GeomCol1) VALUES (:name, :wktGeom)";
$wktGeom1 = "geometry::STGeomFromText(";
$wktGeom = $wktGeom1."".$wktQuoted.", ".$srid.")";
//echo $wktGeom."<br><br>".$name."<br><br>";
$stmnt = $pdo->prepare($sql);
$theData = [':name'=>$name, ':wktGeom'=>$wktGeom];
$stmnt->execute($theData);
} catch(PDOException $e) {
echo "Error: ".$e->getMessage();
}
} else {
$wkt="";
$alignment="";
$srid="";
}
?>
我的名字。php:
<?php
ob_start();
session_start();
try {
$pdo = new PDO( "sqlsrv:Server=localhost\SQLEXPRESS;Database=devdb", "", "");
$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$pdo->setAttribute( PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC );
//$pdo->setAttribute( PDO::ATTR_EMULATE_PREPARES, true );
}
catch( PDOException $e ) {
//die( "Error connecting to SQL Server" );
//die(print_r($stmnt->errorInfo(), true));
echo "Error: ".$e->getMessage();
}
$root_directory = "testwkt";
$from_email = "admin@somewhere.com";
$reply_email = "admin@somewhere.com";
include "php_functions.php";
?>
我知道通过表单接受用户输入的首选方法是使用参数化查询来防止SQL注入。我相信错误消息的来源与WKT周围的引用有关,因为它们没有进入INSERT into语句。是否可以用引号(WKT)包围输入表单中的文本值,并使用它构建几何体对象?
示例WKT进入表格点(100 10)
示例SRID0
示例名称Test
WKT的几何图形(需要引用):
geometry::STPointFromText('POINT (100 10)', 0)
产生的错误消息:
SQLSTATE[42000]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]
A .NET Framework error occurred during execution of user-defined routine or
aggregate "geometry": System.FormatException: 24114: The label
geometry::STGeomFrom in the input well-known text (WKT) is not valid.
Valid labels are POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING,
MULTIPOLYGON, GEOMETRYCOLLECTION, CIRCULARSTRING, COMPOUNDCURVE,
CURVEPOLYGON and FULLGLOBE (geography Data Type only).
System.FormatException: at
Microsoft.SqlServer.Types.OpenGisTypes.ParseLabel(String input) at
Microsoft.SqlServer.Types.WellKnownTextReader.ParseTaggedText(OpenGisType type) at
Microsoft.SqlServer.Types.WellKnownTextReader.Read(OpenGisType type, Int32 srid) at
Microsoft.SqlServer.Types.SqlGeometry.GeometryFromText(OpenGisType type, SqlChars text, Int32 srid) at
Microsoft.SqlServer.Types.SqlGeometry.Parse(SqlString s) .
上传WKT测试表:
CREATE TABLE dbo.Upload_WKT_Test
( id int IDENTITY (1,1),
Name varchar(50),
GeomCol1 geometry );
GO
WKT-众所周知的文本-一种以文本格式表示几何对象(例如点、线、多边形)的方法。更多信息请点击这里。
SRID—空间参考系标识符—表示坐标系的整数。更多信息请点击这里。
有关在SQL服务器和AzureSQL数据库中使用几何实例的详细信息,请参阅此处。
更多关于STGeomFromText的信息
您应该在T-SQL
语句中包含geometry::stgeomefromtext
,并在不使用PDO::quote
的情况下绑定$wkt
参数的值:
<?php
if ($_SERVER['REQUEST_METHOD']=="POST") {
$wkt = $_POST['wkt'];
$srid = $_POST['srid'];
$name = $_POST['name'];
try {
$sql = "
INSERT INTO Upload_WKT_Test (Name, GeomCol1)
VALUES (:name, geometry::STGeomFromText(:wkt, :srid))";
$stmnt = $pdo->prepare($sql);
$theData = [':name'=>$name, ':wkt'=>$wkt, ':srid'=>$srid];
$stmnt->execute($theData);
} catch(PDOException $e) {
echo "Error: ".$e->getMessage();
}
} else {
$wkt="";
$alignment="";
$srid="";
}
?>
我有一个postgres表,它正在使用
问题内容: 我从终端创建了一个表,然后尝试创建简单的任务:从表单中插入值。这是我的 这是我的。 按下我的保存按钮后,什么也没有发生,数据库仍然为空。我尝试了查询,它按照预期的方式从表单中获取所有值。在尝试从终端检查是否可以正常工作后,我登录到尝试从users表返回所有数据的操作,但得到了空集。 问题答案: 以下代码仅声明了一个包含MySQL查询的字符串变量: 它不执行查询。为此,您需要使用一些功能
前面课程绘制了一个立方体效果,下面通过three.js的球体构造函数SphereGeometry()在三维场景中添加一个球几何体。 SphereGeometry构造函数 SphereGeometry(radius, widthSegments, heightSegments) 第一个参数radius约束的是球的大小,参数widthSegments、heightSegments约束的是球面的精度,
我正在尝试使用PHP从HTML表单中插入数据到数据库中。我做了两个文件html表单和其他是PHP脚本。当我单击以html表单提交时,它显示给我php代码。我正在使用wamp服务器作为数据库。我将html文件放在C:/wamp64/www目录中,html文件放在本地目录中。数据库表为:id int(11)fname varchar(30)salary int(11)。Id不是自动递增的,它是主键。
问题内容: 我开发了一种将许多东西插入数据库的表单。但是以某种方式,当页面被填满时,它也只插入数据库管理员的user_password。我该如何解决这个问题? 问题答案: 您忘记输入关键字“ VALUES”。检查INSERT INTO的语法。 您传递给MySQL的变量(“ $ name”,“ $ password”,“ $ email”,“ $ contact”,“ $ age”,“ $ gend
我正在创建一个使用Apache Web服务器(PHPmyAdmin)的PHP网站 我有三张桌子: 品牌 brand_id(主键)自动增加 brand_name < li>item_id(主键)自动递增 < li >项目类别 model_id(主键)自动增加 item_model brand_id(brand.brand_id的外键) brand_name(item.item_id的外键) 数量 价