Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Supondo o seguinte script hipotético:
<?php
$server = 'localhost';
$dbname = 'dbname';
$dbuser = 'root';
$dbpw = '';
$conn = mysql_connect($server, $dbuser, $dbpw) or die(mysql_error());
$db = mysql_select_db($dbname, $conn) or die(mysql_error());
$nome = "abc123";
$teste = "abcde";
$sql = "INSERT INTO table1 VALUES (0, '{$nome}', '{$teste}')";
$query = mysql_query($sql) or die(mysql_error());
echo $query ? 'Sucesso' : ''; //Em caso de falha, o or die resolve.
?>
MySQL Table:
CREATE TABLE `table1` (
`id` int(11) NOT NULL auto_increment,
`make` varchar(255) NOT NULL,
`teste` tinyint(1) default NULL,
PRIMARY KEY (`id`)Sim, eu sei que não é bom usar mysql_ (está ultrapassado) ou or die ou whatever.
Este é só um script-modelo rápido para representar o assunto que quero tratar: Tipos de dados
Segundo o Script SQL, a coluna teste é do tipo int e o script PHP está tentando inserir "abcde".
Não sei se minha suposição está incorreta, mas estou assumindo que o PDO, MySQLi ou qualquer outro tipo de biblioteca do tipo não resolverá meu problema: esta query NÃO retorna erro. Porém, o valor que chega ao MySQL é o nº 0.
Enfim, que opções eu tenho para resolver este tipo de problema?
Ps.: Se possível, tenha em mente que estou construindo uma classe de importação de arquivos .CSV (cujo em breve postarei no laboratório de scripts), porém é um importador mais complexo: O intuito é modelar o banco (criar a estrutura de tabelas) baseado no cabeçalho do arquivo .CSV e, em seguida, importar todos os dados.
Você não lembra +/- como resolveu o problema de tipo de dados? Pelo que vi, a última notícia que tivemos sobre o Code foi 20 de Junho...
Pois é, ele vai voltar, mas não se sabe quando, cara, não lembro pq faz mt tempo que implementei ele, achei uma função e só criei uma classe....
Ninguém mais tem alguma sugestão? :(
Não sei se é uma boa ideia, mas é a única que tive até agora:
<?php
public function importFile($_File){
if($fileContent = file($_File)){
//Para cada linha do arquivo CSV
foreach($fileContent as $header){
//Separando as colunas
$data = explode(";", $header);
//Percorrendo uma por uma
foreach($data as $value){
//is_numeric é a única função que retorna true se a String for um número.
if(is_numeric($value)){
echo 'número ';
//Comparação entre valores encodados.
$iValue = base64_encode((int)$value);
$fValue = base64_encode((float)$value);
if($iValue === $fValue){
echo 'inteiro';
}elseif(base64_decode($fValue) == $value){
$decimal = explode('.', $value);
echo 'decimal com precisão: ' . strlen($decimal[1]);
}
}elseif(is_string($value)){
echo "String: " . strlen($value);
}
echo '<br />';
}
echo "<br /><hr /><br />";
}
?>
Logicamente a função não ficaria assim, mas é só um demonstrativo de como buscar por valores inteiros, decimais e strings. O que acham?
Cara, quando o code.imasters coltar ao ar, eu tenho um código de importar para .csv prontinho com isso mesmo que você deseja...