konak parametre olarak diziyi yerine nasıl tip int
, str
, bool
ve null
değerlerini bağlamak mümkün ama ben dizi türü bağlamak kuramıyorum.
Her iki işlevi de denedim, yani bindValue
ve bindParam
ancak bunların hiçbiri işe yaramadı. Bunu nasıl yapabilirim?PHP - Hazırlanan açıklamada
// a helper function to map Sqlite data type
function getArgType($arg) {
switch (gettype($arg)) {
case 'double': return SQLITE3_FLOAT;
case 'integer': return SQLITE3_INTEGER;
case 'boolean': return SQLITE3_INTEGER;
case 'NULL': return SQLITE3_NULL;
case 'string': return SQLITE3_TEXT;
default:
throw new \InvalidArgumentException('Argument is of invalid type '.gettype($arg));
}
}
$sql = "SELECT * FROM table_name WHERE id IN (?)";
$params = [[10, 9, 6]]; // array of array
$dbpath = '/path/to/sqlite.sqlite';
$db = new SQLite3($dbPath, SQLITE3_OPEN_READONLY);
$stmt = $db->prepare($sql);
try {
foreach ($params as $index => $val) {
if (is_array($val)) {
/************* I am stuck here *************/
$ok = $stmt->bindParam($index + 1, $val);
// Using bindValue also didn't worked!
} else {
$ok = $stmt->bindValue($index + 1, $val, getArgType($val));
}
if (!$ok) {
throw new Exception("Unable to bind param: $val");
}
}
} catch (Exception $ex) {
// NO exception is thrown from bindValue() or bindParam()
$reason = "Error in binding statement. " . $ex->getMessage();
die($reason);
}
$result = $stmt->execute();
$data = [];
while ($row = $result->fetchArray($mode)) {
$data[] = $row;
}
var_dump($data);
Düzenleme: Zaten param dizide soru işaretleri gerekli sayıda tek ?
yerine çalıştı, ama sonra benim dizi az değerlere sahip yalnızca çalışıyor! PHP'deki ifadelerin SQLite3'te nasıl hazırlandığının bir sınırlama olduğunu düşünüyorum.
, ama (geçerli örnekte örneğin 3 '?' Ler) Sorgunuzda her değerin yerine bir yer tutucu koymak gerekir inanıyoruz. Ardından her bir değeri diziden bağlayın; veya diziyi 'execute 'içinde geçirin. – chris85
@ chris85: Yalnızca dizinin 1000 öğeden daha az olması durumunda çalışır. Her durumda çalışmak için bir çözüm istiyorum. Teşekkürler. –
'PHP' veya' sqllite' isabet sınır mı? +1000 'POST' değerlerini almaya mı çalışıyorsunuz? – chris85