You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I have an application using MySQL spatial data types and I need to compare if a point is within an area, basically I have to use a MySQL function with a hexadecimal number as a string comparison.
// DATA stored as a MySQL blob WKB (ie. comes from DB into AR). Below sample just re-creates the $mbr data for testing purposes.
$mbr = hex2bin('000000000102000000020000000e260f5542b52740d7e3198fad514b403250be45ccf52740d7e3198fad514b40');
// $mbr needs to be used within ST_Within function as a hexadecimal number WKB.
// PDO binding converts :mbr to a quoted ('') varchar, which is not a suitable argument type for ST_Within.
// I add an 'X' before :mbr to comply with the PHP hexadecimal string notation.
// as soon as the string becomes "X:mbr", the binding doesn't work:
SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
The SQL being executed was: SELECT COUNT(*) FROM property WHERE ST_Within(gis_point, X'000000000102000000020000000e260f5542b52740d7e3198fad514b403250be45ccf52740d7e3198fad514b40')=TRUE
// if the string is just ":mbr", the binding works, but then the data type is wrong - as expected
SQLSTATE[HY000]: General error: 4079 Illegal parameter data type varchar for operation 'st_within'
The SQL being executed was: SELECT COUNT(*) FROM property WHERE ST_Within(gis_point, '000000000102000000020000000e260f5542b52740d7e3198fad514b403250be45ccf52740d7e3198fad514b40')=TRUE
// Basically PDO binding gets confused if there is a character pre-pended before the colon ":" in the name of a binding param. It needs to be nothing, or a space for the binding to work.
Is this a Yii parsing issue or a PDO issue?
Thanks.
The text was updated successfully, but these errors were encountered:
I have an application using MySQL spatial data types and I need to compare if a point is within an area, basically I have to use a MySQL function with a hexadecimal number as a string comparison.
// DATA stored as a MySQL blob WKB (ie. comes from DB into AR). Below sample just re-creates the $mbr data for testing purposes.
$mbr = hex2bin('000000000102000000020000000e260f5542b52740d7e3198fad514b403250be45ccf52740d7e3198fad514b40');
// $mbr needs to be used within ST_Within function as a hexadecimal number WKB.
// PDO binding converts :mbr to a quoted ('') varchar, which is not a suitable argument type for ST_Within.
// I add an 'X' before :mbr to comply with the PHP hexadecimal string notation.
return Property::find()
->where(['ST_Within(
gis_point
, X:mbr)' => true])->addParams([':mbr' => bin2hex($mbr)])
->count();
// as soon as the string becomes "X:mbr", the binding doesn't work:
SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
The SQL being executed was: SELECT COUNT(*) FROM
property
WHERE ST_Within(gis_point
, X'000000000102000000020000000e260f5542b52740d7e3198fad514b403250be45ccf52740d7e3198fad514b40')=TRUE// if the string is just ":mbr", the binding works, but then the data type is wrong - as expected
SQLSTATE[HY000]: General error: 4079 Illegal parameter data type varchar for operation 'st_within'
The SQL being executed was: SELECT COUNT(*) FROM
property
WHERE ST_Within(gis_point
, '000000000102000000020000000e260f5542b52740d7e3198fad514b403250be45ccf52740d7e3198fad514b40')=TRUE// Basically PDO binding gets confused if there is a character pre-pended before the colon ":" in the name of a binding param. It needs to be nothing, or a space for the binding to work.
Is this a Yii parsing issue or a PDO issue?
Thanks.
The text was updated successfully, but these errors were encountered: